首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DefaultValue对映射对象的使用形式作出反应

DefaultValue对映射对象的使用形式作出反应
EN

Stack Overflow用户
提问于 2022-03-16 08:21:17
回答 2查看 161关注 0票数 0

如何获取映射对象的值并分配给useform。

代码语言:javascript
复制
     const def = jobdetail.defect_details;
     const sample = def?.map((item) => {
     return {
              defects: item.defects,
              recommendation: item.recommendation,
              photo: []
          };
      });

    const defects_json = JSON.stringify(sample);
    const output = defects_json?.replace(/"(\w+)":/g, '$1:');

    // result of const output when console.log(output) 
    [{defects:"defect 2",recommendation:"recomendatin 2",photo:[]},{defects:"defect1 ",recommendation:"recommendation 1",photo:[]}]

这是我的使用表

代码语言:javascript
复制
      const {
             register,
             formState: { errors },
             handleSubmit,
             reset,
             control,
             getValues,
             setValue,
     } = useForm({
        shouldFocusError: false,
         defaultValues: {
         defectslist: output, // its empty
         partslist: [
           { sorCode: "", item: "", quantity: "", rates: "", subtotal: "" },
         ],
      },
  });

希望有人能帮我解释为什么const输出在useform中是空的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-21 01:51:26

我已经解决了这个问题。我需要传递object以便从useEffect中重置()来重新呈现值:

代码语言:javascript
复制
 const {
   register,
   formState: { errors },
   handleSubmit,
   control,
   getValues,
   setValue,
   reset,
   initialState
 } = useForm();


useEffect(() => {
    reset(jobdetail);
}, [jobdetail])
票数 1
EN

Stack Overflow用户

发布于 2022-03-16 11:16:17

defaultValues的键需要对应于输入组件的name支柱。因此,您的defaultValues对象本质上需要如下所示:

代码语言:javascript
复制
{
  defects0: "defect 2",
  recommendation0: "recomendatin 2",
  photo0: []
  defects1: "defect 2",
  recommendation1: "recomendatin 2",
  photo1:[],
  sorCode: "",
  item: "",
  quantity: "",
  rates: "",
  subtotal: ""
}

你的html必须看起来像:

代码语言:javascript
复制
<input name="defects0" ref={register}>
<input name="recommendation0" ref={register}>

要实现第一个目标,您可以这样做:

代码语言:javascript
复制
const defaultValuesObj = { sorCode: "", item: "", quantity: "", rates: "", subtotal: "" }
def?.forEach((item, i) => {
 defaultValuesObj[`defects${i}`] = item.defects
 defaultValuesObj[`recommendation${i}`] = item.recommendation
 defaultValuesObj[`photo${i}`] = item.photo
});

你可以做defaultValues: defaultValuesObj

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71493708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档