2

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

小样

{
  "fname": "sasa",
  "lname": "asasasa"
} 

这是预期的输出

{
  "fname": "sasa",
  "lname": "asasasa",
  "localAddress":[
    {
      "street1":"street1",
      "street2":"street2",
      "city":"city"
    },
    {
      "street1":"street2",
      "street2":"street2",
      "city":"city"
    }
  ]
} 



这是我的密码


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

感谢任何帮助。

4

2 回答 2

4

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

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

因此,这是您的情况需要做的事情:

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

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

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

  // ... 
}

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

<Controller
  name="tag"
  control={methods.control}
  as={
    <Table1
      name="tag"
      ref={methods.register}
      columns={columns}
      data={localAddress}
      {...methods}
    />
  }
/>;

有了这个:

<Table1 columns={columns} data={localAddress} />

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

于 2020-06-25T18:50:19.933 回答
0

干得好 :

首先:我们需要input盒子,name它可以生成文本输出

name="localAddress[0][street1]"
name="localAddress[0][street2]"
name="localAddress[0][city]"

name="localAddress[1][street1]"
name="localAddress[1][street2]"
name="localAddress[1][city]"


// to generate the name you can do something like this
<Input
    type="text"
    name={`localAddress[${i}][${columns[j]["accessor"]}]`}
    placeholder={columns[j]["accessor"]}
    innerRef={methods.register}
/>

第二: 我们需要访问methods

// pass it from props
<Table1
    name="tag"
    ref={methods.register}
    columns={columns}
    data={localAddress}
    methods = {methods} // <---- Pass HERE
/>

// access it via props
export const Table1 = React.forwardRef(({ columns, data, methods }, ref) => { 

工作演示:(对于输出,您可以检查控制台)

编辑#SO-hook-forms-solved

于 2020-06-25T19:02:46.017 回答