【问题标题】:react-hook-form id not saved with useFieldArrayreact-hook-form id 未使用 useFieldArray 保存
【发布时间】:2021-05-08 08:32:57
【问题描述】:

有人能找出我的代码有什么问题吗?我正在使用 react-hook-form 的 useFieldArray 并希望为每个字段生成一个唯一的 id。我正在尝试使用 append 来做到这一点,但不知何故 id 字段消失了。即使我更改了keyname: 'newId',也不会登录到数据中。

我也在使用 Material UI。

我的代码:

...
    const { register, control, handleSubmit, errors } = useForm({
        defaultValues: {
          arrayName: {id: uuidv4(), name: "name goes here"}
        }
      });

    const { fields, remove, append } = useFieldArray(
        {
          control,
          name: "arrayName",
          // keyName: 'formId' // deafult and you can rename to others
        }
    );
...
                <TextField 
                    label="Test Type"
                    variant="outlined"
                    type="text"
                    name={`arrayName[${index}].name`}
                    defaultValue={`${field.name}`}
                    inputRef={register()}
                />
        <Button
            variant="contained"
            color="primary"
            size="large"
            className={classes.button}
            startIcon={<AddCircleIcon />}
            onClick={() => append({ id: uuidv4(), type: "", score: 0 })}
        >
            Add Array Item
        </Button> 

稍后我有一个提交按钮,调用它:

    const onSubmit = data => {
        handleArrayChange(originalArray.id, { ...originalArray, ...data })
        history.push(`/newURL`)
    }

提前谢谢你!

【问题讨论】:

    标签: javascript reactjs react-hook-form


    【解决方案1】:

    基于react-hook-form docs中给出的示例append参数对象key应该与字段name匹配

    .../ some codes
    <TextField name={`arrayName[${index}].id`} />
    <TextField name={`arrayName[${index}].type`} />
    <TextField name={`arrayName[${index}].score`} />
    
    .../ some codes
     <Button onClick={() => append({ id: uuidv4(), type: "", score: 0 })} >
    

    【讨论】:

    • 谢谢!这是否意味着我必须有一个带有 id 的文本字段?有没有办法不向用户展示它?我想带有随机长字符串的文本字段可能会令人困惑和令人反感。
    • 您可以遍历提交的数组并手动添加 id 或使用 input 输入 hidden 或使用 display:none 设置当前文本字段的样式
    猜你喜欢
    • 2021-07-15
    • 2022-10-14
    • 2021-07-28
    • 2022-01-06
    • 2023-01-31
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    相关资源
    最近更新 更多