reactjs - 使用 React Hook Form 注册嵌套对象

标签 reactjs object react-hook-form

我已经使用 RHF 工作了一段时间,它实际上帮助了很多,但我一直在尝试做一些我可能没有足够知识的事情。

所以我有一个嵌套对象,我把它带到了我的 componen throw props

const Child = ({ globalObject, register }) => {
    const renderNested = Object.entries(globalObject.nestedObject);
    

    return (
                        <span>
                            {renderNested.map(([key, value], index) => {
                                return (
                                    <div key={index}>
                                        <Field
                                            type="text"
                                            label={key}
                                            name{`nestedObject.${key}`}
                                            defaultValue={value}
                                            ref={register}
                                        />
                                    </div>
                                );
                            })}
                        </span>

    );
};

很好,现在,这个 nestedObject 中的一个键有另一个对象作为值,当我映射它们并显示时,该字段将显示:[object Object] 例如,如果我使用 useState,我知道我将如何解决该问题。 不确定这是否是一个好的做法,但我会选择类似的东西:

defaultValue={typeof value === 'someKey' ? value[key] : value}

但在这种情况下使用寄存器(我想使用它,因为它使我免于其他噩梦)我不确定如何解决这个问题。 我是否应该在外部过滤数组,然后在一侧呈现没有对象作为值的键,然后呈现其余的键? 在我看来,它必须比这更好。 谁能给点建议?

只是为了澄清,nestedObject 看起来像:

nestedObject: {
key: value
key: {key:value}
}

最佳答案

根据 register 的文档,您可以使用 . 点符号访问字段方法。所以 register("name.key") 可以检索嵌套对象和数组,但是请注意,在 React Hook Form v7 中 syntax to retrieve nested array items changedarrayName[0]arrayName.0

您的组件将类似于以下内容:

const Child = ({ globalObject, register }) => {
  const nestedKeys = Object.keys(globalObject.nestedObject);

  return (
    <>
      {nestedKeys.map((key) => (
        <Field key={key} {...register(`nestedObject.${key}`)} />
      ))}
    </>
  );
};

should not use index as key prop在这种情况下,因为每个数组元素都有另一个稳定标识符,它来自唯一的嵌套对象键。

关于reactjs - 使用 React Hook Form 注册嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71301798/

相关文章:

javascript - 无法在 'readAsBinaryString' : parameter 1 is not of type 'FileReader' 上执行 'Blob'

javascript - react typescript : Argument of type '{ [x: number]: any; }' is not assignable to parameter of type

javascript - 如何仅删除实例中添加的事件处理程序?

ruby - 我无法在替代类的方法中调用属于某些类的方法

javascript - 在 React 中使用不可变状态有什么缺点?

javascript - 随机图像链接在元素列表中呈现相同的效果

c# - 通过 TCP/IP 发送 myObject

reactjs - react-hook-form reset 不适用于 Controller + antd

reactjs - React-hook-form 使用 Material UI 文本字段限制长度和类型

reactjs - 如何使用 Ionic、React、Yup 和 Resolvers 解决“.”上的 "termsOfUse must be a boolean type, but the final value was: "