【问题标题】:react-table v7 within react-hook-formreact-hook-form 中的 react-table v7
【发布时间】:2020-06-08 17:08:40
【问题描述】:

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


当我在这里提交时,我在提交的数据中看到了

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

这是预期的输出

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



这是我的密码箱
Codesanbox

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

感谢任何帮助。

【问题讨论】:

    标签: reactjs react-table react-hook-form react-forms


    【解决方案1】:

    正如“使用 UI 库”部分中的 get-started docs 中所述:

    选项 3:我们可以使用 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);
      };
    
      // ... 
    }
    

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

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

    用这个:

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

    应该是这样的。当然还有sandbox

    【讨论】:

      【解决方案2】:

      给你:

      首先:我们需要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) => { 
      

      WORKING DEMO :(输出可以查看控制台)

      【讨论】:

        猜你喜欢
        • 2022-11-22
        • 1970-01-01
        • 2018-10-23
        • 2020-02-26
        • 2022-12-21
        • 1970-01-01
        • 2020-06-06
        • 2021-07-28
        • 2022-01-06
        相关资源
        最近更新 更多