为了账号安全,请及时绑定邮箱和手机立即绑定

重置useState的初始状态

重置useState的初始状态

一只斗牛犬 2021-03-28 19:17:28
为了提高我的React技能,我一直在尝试构建可重用的表单状态挂钩和表单验证器。我的自定义钩子FormState用空字符串初始化一个对象,该对象的值将用作我的钩子的初始状态。我编写了一个函数clearInputs,我希望将输入重置为初始状态,但无法更新。我一直在四处寻找答案,甚至参考此Stack Overflow帖子:使用React Hooks重置为初始状态。仍然没有骰子。// MY FORMSTATE HOOKimport { useState } from 'react';const FormState = props => {    let initialState = { ...props };    const [ inputs, setInputs ] = useState(initialState);    const [ errors, setErrors ] = useState(initialState);    const handleInput = e =>        setInputs({            ...inputs,            [e.target.name]: e.target.value        });    const handleError = errs => setErrors({ ...errors, ...errs });    const resetForm = () => {        setInputs({ ...initialState });        setErrors({ ...initialState });    };    const clearInputs = () => {        console.log('SUPPOSED TO CLEAR', initialState)        console.log('MY INPUTS', inputs)        setInputs({ ...initialState });        console.log('AFTER THE SETTING', inputs)    };    return [ inputs, handleInput, errors, handleError, resetForm, clearInputs ];};export default FormState;触发clearInputs时,应将输入重置为初始状态。相反,什么也没有发生。任何帮助都非常感谢。编辑:让我进一步澄清。我表单中的每个字段都从输入(用户名,密码1等)传递一个值。调用clearInputs时,它会清除钩子中的输入,但不会清除Field中的值。
查看完整描述

2 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

关于为什么登录不正确,必须理解这一点:每次调用钩子时(基本上在每个表单渲染器上),都会创建一个新的clearInputs函数,该函数具有其自己的版本inputs。因此,在clearInputs函数本身inputs内部无法更改,因为它们来自作用域中较高的位置,即useState。

如果您想注意到钩子的两次调用之间的变化,则可以inputs在返回[inputs,...]之前记录日志。

同样,在您的钩子中,您没有在调用setInputs,而是定义了一个clearInputs函数,该函数将触发状态更改,该函数将重新呈现您的组件,该函数将再次使用您的钩子,您的钩子将读取的新值inputs并创建一个新clearInputs功能。


查看完整回答
反对 回复 2021-04-08
  • 2 回答
  • 0 关注
  • 1527 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号