Javascript 无法在react钩子窗体中将嵌套对象设置为默认值

Javascript 无法在react钩子窗体中将嵌套对象设置为默认值,javascript,reactjs,react-hook-form,Javascript,Reactjs,React Hook Form,我正在尝试设置从API接收的默认值。 除了嵌套的对象值-email和phone 一般来说,当我键入值并提交它们时,表单工作得很好,但反过来不行 const { name, description, contact } = fetchedData; const { email, phone } = contact; const { reset } = useForm({ mode: "onChange", defaultValues: { name

我正在尝试设置从API接收的默认值。 除了嵌套的对象值-
email
phone

一般来说,当我键入值并提交它们时,表单工作得很好,但反过来不行

const { name, description, contact } = fetchedData;
const { email, phone } = contact;

const { reset } = useForm({
    mode: "onChange",
    defaultValues: {
      name,
      description,
      contact: {
        email,
        phone,
      }
    }
})

useEffect(() => {
    reset({
      name,
      description,
      contact: {
        email,
        phone,
      }
    });
}, [fetchedData]);

它可能会导致对象的非结构化问题。对一个对象进行非结构化处理,这就是为什么不复制深场的原因

您可以尝试使用
JSON.parse(JSON.stringify())
创建一个副本,并将其传递给reset函数

useffect(()=>{
const deepCopy=JSON.parse(JSON.stringify({
名称
描述
联系人:{
电子邮件,
电话,
}
}
))
重置(深度复制);

},[fetchedData])
您可以添加一些关于
重置
功能的信息吗?这个函数做什么?首先,我认为对象的非结构化问题。最好使用
Object.assign()
。如果你能提供更多的信息,我可能会回答得更好:)Object.assign不会做深度复制,它不会比第一级更深入,不像像Thank you这样的助手,我将解决方案改为
JSON.parse(JSON.stringify())
@KletskovG不幸的是没有运气,我尝试使用
useMemo
hook设置默认值,因为它有一些解决方法,但仍然没有成功
defaultValues:useMemo(()=>deepCopy |{},[deepCopy]),
@KletskovG验证了代码,并且还有一些与深度复制无关的附加问题。看起来您建议的解决方案与预期的一样有效。非常感谢@祝你好运!