react-table v7 在 react-hook-form 中
react-table v7 within react-hook-form
我正在研究一个复杂的反应形式,它几乎没有控制输入以及 grid/table。目前我正在使用 react-hook-form 进行验证。
这是我的模型。这里的想法是根据需要显示网格,直到用户添加一些数据。用户可以通过单击“+”或“-”按钮来 add/remove 数据。
当我在这里提交时,我在提交的数据中看到了
{
"fname": "sasa",
"lname": "asasasa"
}
这是预期的输出
{
"fname": "sasa",
"lname": "asasasa",
"localAddress":[
{
"street1":"street1",
"street2":"street2",
"city":"city"
},
{
"street1":"street2",
"street2":"street2",
"city":"city"
}
]
}
这是我的 codesanbox
Codesanbox
不确定如何将 react-table(或任何 table 组件)与 react-hook-form(或任何反应形式)集成。使用 "react-table" 构建表单对我来说是必须的。
感谢任何帮助。
如“使用 UI 库”部分的 get-started docs 所述:
Option 3: we can set up a custom register using the useEffect
Hook and update the value via 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.
给你:
首先 :我们需要 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 :(对于输出你可以检查控制台)
我正在研究一个复杂的反应形式,它几乎没有控制输入以及 grid/table。目前我正在使用 react-hook-form 进行验证。
这是我的模型。这里的想法是根据需要显示网格,直到用户添加一些数据。用户可以通过单击“+”或“-”按钮来 add/remove 数据。
当我在这里提交时,我在提交的数据中看到了
{
"fname": "sasa",
"lname": "asasasa"
}
这是预期的输出
{
"fname": "sasa",
"lname": "asasasa",
"localAddress":[
{
"street1":"street1",
"street2":"street2",
"city":"city"
},
{
"street1":"street2",
"street2":"street2",
"city":"city"
}
]
}
这是我的 codesanbox
Codesanbox
不确定如何将 react-table(或任何 table 组件)与 react-hook-form(或任何反应形式)集成。使用 "react-table" 构建表单对我来说是必须的。
感谢任何帮助。
如“使用 UI 库”部分的 get-started docs 所述:
Option 3: we can set up a custom register using the
useEffect
Hook and update the value viasetValue
.
因此,对于您的情况,需要完成以下操作:
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.
给你:
首先 :我们需要 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 :(对于输出你可以检查控制台)