reactjs 当我折叠、添加或删除面板时,React-hook-form字段值丢失

8hhllhi2  于 2023-10-17  发布在  React
关注(0)|答案(5)|浏览(224)

我正在使用材料ui ExpansionPanel。我试图添加新的面板从添加按钮单击和删除面板从删除按钮单击,其工作正常,问题是,当我展开,折叠,添加或删除面板,表单字段值丢失。我认为这是由于重新渲染或刷新而发生的。
让我知道我们如何实现上述功能,使用户可以轻松地导航到任何面板添加一些细节,从那里移动到另一个面板,并添加一些细节,但同时从一个面板添加到另一个面板的细节,值必须有,如果用户再次前往该perticular面板。

看看下面的示例代码

https://codesandbox.io/s/dhananajayx-3n73x?file=/src/App.js:146-160
任何努力都受到高度赞赏

apeeds0o

apeeds0o1#

  • useForm({ shouldUnregister:});

当使用react-hook-form时,每个表单元素都是在一个标签变化或其他情况下呈现的,使用上面的代码不要让任何字段从表单中注销,并保持表单值不变。

wribegjk

wribegjk2#

1.发送一个引用到组件(阅读Register fields了解更多信息)
1.使用先前的值设置defaultValue。在每个重新呈现组件中,在其输入中使用默认值。
在codesandbox上查看this

qaxu7uf2

qaxu7uf23#

当输入从DOM树中删除时,React Hook Form会自动删除值,基本上,当输入被折叠时,unregister会被调用。

解决方案

useEffect(() => {
  register('yourInput');
}, [register])

setValue('yourInput', 'data')

这个unregister不会自动发生,您可以在调用unregister时驱动。

wbgh16ku

wbgh16ku4#

这一方法:
在主视图中:

const methods = useForm(form)
const [value, setValue] = useState(0)

<FormProvider {...{value, ...methods}}>

</FormProvider>

选项卡项目示例:

// first item 
const TabItem1 = () => {
    const {value} = useFormContext()

    return <TabPanel {...{value, index: 0}}>
      {/*{Content here}*/}
    </TabPanel>
}

export default TabItem1

// second item
const TabItem2 = () => {
    const {value} = useFormContext()

    return <TabPanel {...{value, index: 1}}>
      {/*{content here}*/}
    </TabPanel>
}

export default TabItem2

和TabPanel:

const TabPanel = ({children, value, index}) =>
    <div style={{display: value === index ? 'block' : 'none'}}>
        {children}
    </div>

export default TabPanel
gcmastyq

gcmastyq5#

我使用stepper输入用户信息,分为4个步骤和useForm({ shouldUnregister:false }); didn't work so I Changed this:

{activeStep === 0 && (
            <label>
              Name:
              <input type="text" name="name"  />
            </label>
          )}

收件人:

<label>
            Name:
            <input
              type="text"
              name="name"
              style={{ display: activeStep === 0 ? "block" : "none" }}
            />
 </label>

相关问题