无法更新状态 - react-native
Posted
技术标签:
【中文标题】无法更新状态 - react-native【英文标题】:Unable to update state while using React Native 【发布时间】:2022-01-22 01:10:49 【问题描述】:试图掌握反应钩子useState
。目前我无法更新我的错误对象的状态,有点不确定我哪里出错了。这里的想法是将错误消息存储在注册表单中
在此示例中,用户提交了一个空的名字,但错误对象始终保持为空
谁能看看我做错了什么,好吗?谢谢
export const SignUp = () =>
const [errors, setErrors] = useState();
const validateFirstName = () =>
if (formData.firstName === undefined)
setErrors(...errors, firstName: 'First Name is required');
console.log(errors); // When condition is met errors is still an empty object
;
【问题讨论】:
让你多次运行它,因为最初,它会因为重新渲染而记录为空,因为之前的状态是空的。 【参考方案1】:试试这个,我在代码中添加了 cmets。
export const SignUp = () =>
const [errors, setErrors] = useState();
console.log(errors); // try with this
const validateFirstName = () =>
if (formData.firstName === undefined)
setErrors(...errors, firstName: 'First Name is required');
console.log(errors); // at this point, it is normal to have an empty errors, cause your component did not re-rendered yet
;
【讨论】:
啊,我明白了,是的,当以const [errors, setErrors] = useState();
登录时,我可以看到正在更新的错误。谢谢你的解释【参考方案2】:
你所做的基本上是正确的。当您调用 console.log() 时,状态还没有改变。如果你想在你的状态改变时做一些事情,你可以使用 useEffect 钩子并将状态作为第二个参数传递。当您在 jsx 代码中的某个地方使用错误状态时,它会按照您的预期工作。
export const SignUp = () =>
const [errors, setErrors] = useState();
useEffect(() =>
console.log(errors);
,[errors])
const validateFirstName = () =>
if (formData.firstName === undefined)
setErrors(...errors, firstName: 'First Name is required');
;
【讨论】:
以上是关于无法更新状态 - react-native的主要内容,如果未能解决你的问题,请参考以下文章
react-native 应用程序更新警报代码无法更新应用程序
React-Native:无法将 babel 更新到 ES7
React useEffect 抛出错误:无法对未安装的组件执行 React 状态更新