reactjs - 每次屏幕出现时在useEffect中设置setState
问题描述
我有一些 useEffect 功能,该功能在组件首次出现时起作用:
useEffect(() => {
(async function () {
try {
console.log('works');
const token = await AsyncStorage.getItem('token');
if (token)
setState({...state, isAuthorized: true})
} catch (error) {
console.log(error)
}
})();
}, []);
但是,如果我从参数中删除空数组,如何让它每次都工作而不调用无限循环?
解决方案
你必须提到依赖数组作为useEffect()
hook 的第二个参数来告诉 React 什么时候需要useEffect
运行。默认情况下,react 将useEffect
在每个组件渲染/更新上运行。
因此,如果您遇到无限循环,则您的依赖数组可能不正确。您实际上遇到了 useEffect 将运行的情况,更新组件中的某些内容,这将触发重新渲染,然后 useEffect 将再次运行,并且此循环将无限重复。
useEffect
我不认为在使用钩子时不会提及依赖数组的任何用例。始终建议将依赖项列表作为数组提到useEffect
hook 的第二个参数,或者如果没有任何依赖项,则必须传递一个空数组。这应该可以防止在您的应用程序中发生无限循环/重新渲染。
推荐阅读
- oauth-2.0 - 支持“个人访问令牌”或“API 密钥”
- laravel - 从 mysql 数据库中获取动态图像
- php - 有没有办法显示每个正在运行的会话变量的名称?
- javascript - 接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足 Ionic 3 产品构建
- javascript - 使用 node.js 在 pdf 中获取特定信息
- python-3.x - Dask:持续提交,处理所有提交的数据
- vue.js - 如何删除尾部斜杠?
- reactjs - 使用 combineReducers 将 2 个减速器合二为一
- pandas - pandas count groupy 2 属性
- javascript - 如何在数组Javascript中推送对象?