typescript 未处理rc-field-form Package 中的更改

laawzig2  于 2023-01-14  发布在  TypeScript
关注(0)|答案(1)|浏览(112)

我从rc-field-from包为Field做了如下 Package :

import * as React from "react";
import Form from "rc-field-form";
import type { FieldProps } from "rc-field-form/lib/Field";

const { Field } = Form;

interface LabelFieldProps extends FieldProps {
  label?: React.ReactNode;
  onClick?: (event?: React.MouseEvent<HTMLElement>) => void;
  onChange?: (event?: React.ChangeEvent<HTMLElement>) => void;
}

export const FormField: React.FunctionComponent<LabelFieldProps> = ({
  name,
  label,
  children,
  ...restProps
}) => (
  <Field name={name} {...restProps}>
    {(control, meta, form) => {
      const childNode =
        typeof children === "function"
          ? children(control, meta, form)
          : React.cloneElement(children as React.ReactElement, {
              ...control
            });

      return (
        <div className="flex flex-col mb-5">
          <div className="flex flex-col">
            {label && <span className="text-md font-semibold mb-2">{label}</span>}
            {childNode}
          </div>
        </div>
      );
    }}
  </Field>
);

但是当我想在FormField组件的子组件中使用onClick时,如下所示:

<FormField name="test" label="Some Test">
    <Input onChange={(e) => console.log(e.target.value)} /> //nothing print here
</FormField>

然后我的onChange或onCLick(nothing)被触发。有人能告诉我我的字段 Package 器出了什么问题,以及如何修复它以便在我的childs上使用onChange吗?
谢谢你的帮助!

xtupzzrd

xtupzzrd1#

您应该将onClickonChange传递给以下孩子

React.cloneElement(children as React.ReactElement, {
  ...control,
  onClick,
  onChange
});

在你将它们从 prop 中分解出来之后

{
  name,
  label,
  children,
  onClick,
  onChange,
  ...restProps
}

相关问题