在react-hook-form中react-table v7

Nnp*_*Nnp 3 reactjs react-table react-hook-form react-forms

我正在研究一个复杂的反应形式,它几乎没有受控输入以及网格/表格。目前我正在使用react-hook-form进行验证。
这是我的模型。这里的想法是根据需要显示网格,直到用户添加一些数据。用户可以通过单击“+”或“-”按钮添加/删除数据。

小样
当我在这里提交时,我在提交的数据中看到的是

{
  "fname": "sasa",
  "lname": "asasasa"
} 
Run Code Online (Sandbox Code Playgroud)

这是预期的输出

{
  "fname": "sasa",
  "lname": "asasasa",
  "localAddress":[
    {
      "street1":"street1",
      "street2":"street2",
      "city":"city"
    },
    {
      "street1":"street2",
      "street2":"street2",
      "city":"city"
    }
  ]
} 
Run Code Online (Sandbox Code Playgroud)



这是我的codesanbox
Codesanbox

不知道如何将react-table(或任何表组件)与react-hook-form(或任何react形式)集成。使用“react-table”构建表单对我来说是必须的。

感谢任何帮助。

str*_*tss 6

正如“使用 UI 库”部分的入门文档中所述:

选项 3:我们可以使用 Hook 设置自定义寄存器useEffect 并通过 更新值setValue

因此,您的情况需要执行以下操作:

export default function App() {
  const { register, handleSubmit, setValue } = useForm();
  // ... 

  React.useEffect(() => {
    register({ name: "localaddress" });
  }, [register]);

  const addLocalAddress = function() {
    // ... 
    setValue("localaddress", d);
    setLocalAddress(d);
  };

  // ... 
}
Run Code Online (Sandbox Code Playgroud)

有了这个,你需要Controller通过替换它来摆脱它:

<Controller
  name="tag"
  control={methods.control}
  as={
    <Table1
      name="tag"
      ref={methods.register}
      columns={columns}
      data={localAddress}
      {...methods}
    />
  }
/>;
Run Code Online (Sandbox Code Playgroud)

有了这个:

<Table1 columns={columns} data={localAddress} />
Run Code Online (Sandbox Code Playgroud)

应该是这样。当然还有沙盒