1

我正在替换select我的应用程序中的一些输入以使用react-select. 在使用之前react-select,我正在使用该功能清除提交时表单中的选定选项,.reset()现在似乎没有任何影响。

我试图将一个变量存储在onSubmit函数中,null并将其作为要设置为defaultValue道具的值,因为Controller它认为它会重置事物。然而这并没有奏效。什么是处理这个问题的干净方法?

父表单组件:

function AddActivityForm(props) {

  const { register, handleSubmit, control, watch, errors } = useForm();

  const onSubmit = (data) => {
    //Additional logic here
    document.getElementById("activity-entry-form").reset();
  };

  return (
    <Form id="activity-entry-form" onSubmit={handleSubmit(onSubmit)}>
          <ActivityPredecessorInput
            activities={props.activities}
            formCont={control}
          />
      <Button variant="primary" type="submit" className="mb-2">
        Submit
      </Button>
    </Form>
  );
}

export default AddActivityForm;

孩子使用Selectfrom react-select:

function ActivityPredecessorInput(props) {
  const activities = props.activities;
  const options = activities.map((activity, index) => ({
    key: index,
    value: activity.itemname,
    label: activity.itemname,
  }));
  return (
    <Form.Group controlId="" className="mx-2">
      <Form.Label>Activities Before</Form.Label>
      <Controller
        as={
          <Select
            isMulti
            options={options}
            className="basic-multi-select"
            classNamePrefix="select"
          />
        }
        control={props.formCont}
        name="activitiesbefore"
        defaultValue={""}
      />
    </Form.Group>
  );
}

export default ActivityPredecessorInput;
4

2 回答 2

2

根据@Bill 在原始帖子的评论中提供的示例回答我自己的问题。React-hook-form 提供了一种重置方法,可以非常简单地处理这种情况。

创建一个const来存储默认值(在这种情况下存储在父组件中)。

const defaultValues = {
  activitiesbefore: "",
};

将方法包含resetuseForm const.

const { register, handleSubmit, reset, control, watch, errors } = useForm();

在传递的函数中调用reset方法。onSubmitdefaultValues

reset(defaultValues);
于 2020-05-10T15:53:25.730 回答
0

您可以将带有 setValue 值的 onClick onClick={()=> setValue("activitiesbefore", "")} 参数从 useForm const { register, handleSubmit, errors, reset, control, setValue} = useForm(); 传递到重置按钮或提交按钮

于 2020-09-25T15:09:07.943 回答