reactjs - 对依赖变化执行useEffect的回调函数的不同代码
问题描述
一个函数 fetchData() 在组件加载时被调用,并且当这个组件的 testA 和 testB 属性发生变化时也会被调用。而且当只有 testA 道具发生变化时,我想执行状态更新。现在,当 testA 和 testB 发生变化时,状态更新正在发生。
useEffect(()=>{
fetchData();
// Only When testA changes I want to update the below state.
// setTableData([]);
},[testA, testB]);
如果我使用 2 useEffect 我将在初始渲染时调用 fetchData 两次。这是不可接受的。
useEffect(()=>{
fetchData();
setTableData([]);
},[testA]);
useEffect(()=>{
fetchData();
},[testB]);
如何使用钩子实现此功能?
解决方案
您可以在调用之前向其中一个钩子添加测试,fetchData
以查看您是否在初始渲染中。例如,如果fetchData
更新某个data
状态,您可以data
从 undefined 开始并执行以下操作:
useEffect(()=>{
fetchData();
setTableData([]);
},[testA]);
useEffect(()=>{
if (data) {
// then we're not on the initial render
fetchData();
}
},[testB]);
或者你可以用不同的状态变量做同样的事情,它的内容可以用来确定你是否在初始渲染上——它不必是data
.
推荐阅读
- angular - 使用角度 4 从 FileReader onload 函数内部返回一个布尔值
- javascript - TypeScript:映射强类型集合
- python - 错误“-: 'str' 和 'float' 的操作数类型不受支持?
- r - Extract first N digits from a string
- python - 无法将 tensorflow 导入 python 3.5(在 2.7 中成功导入)
- ios - 丰富的推送通知不适用于 IOS 中的 FCM
- c# - 计时器计数无法正常工作
- laravel - Laravel Eloquent:计算行数并按天分组
- c# - IF 条件 AND / OR 逻辑失败 - c#
- c# - 什么是“公开名单”
ABC {得到; 放; } = 新列表 ();“ 这个意思?