javascript - 在循环中调用异步函数的 useEffect
问题描述
我的情况是这样的:
export default function Component({ navigation }) {
const [ item, setItem ] = useState([]);
useEffect(() => {
AsyncStorage.getItem('someItem')
.then(data => JSON.parse(data))
.then(jsonData => {
setItem(jsonData);
})
.catch(error => {});
}, [item]);
问题是 useEffect 似乎是在循环中调用的,即使“item”没有改变。如果我从依赖项数组中删除项目,它只会被调用一次,并且当项目更改时,组件不会重新渲染。有解决办法吗?
像这样解决:
export default function Component({ navigation }) {
const [ item, setItem ] = useState([]);
const [ update, setUpdate ] = useState(false);
const handleUpdate = () => {
setUpdate(!update);
}
useEffect(() => {
AsyncStorage.getItem('someItem')
.then(data => JSON.parse(data))
.then(jsonData => {
setItem(jsonData);
})
.catch(error => {});
}, [update]);
当我想更新项目的状态时,然后调用 handleUpdate (或将其传递给子组件并让子组件调用它)。
解决方案
你有一个无限循环:你发送的第二个参数useEffect()
是一个依赖数组。每次这些依赖项中的一个发生更改时 -useEffect()
将调用作为回调的第一个参数。所以在这里你做:
每次item
更改 - 运行更改item
的代码(因为回调设置值setItem
)
注意:useEffect 也会首先调用一次发送给它的回调。
推荐阅读
- android - Firestore 客户和发票,修改后的要求
- c# - 使用 AutoMapper 将成员映射委托给子对象
- r - R中的数据传播和同时NA下降?
- php - AWS - Elastic BeanTalk:[错误] 'php' 未找到或无法统计
- javascript - 将每个数组转换为对象
- ionic-framework - Ionic 3,可编辑选择
- php - 解析嵌套数组并将其保存在具有父 ID 的 mysql db 中
- c++ - 子类化 STL 容器:范围构造函数不起作用
- javascript - 如何在 2 个反应本机应用程序之间共享通用代码
- objective-c - 找到项目,然后在 NSMutableData 数组中删除它