reactjs - 将箭头函数传递给使用钩子的组件会导致 useEffect 再次触发
问题描述
如何将箭头函数作为道具传递给使用钩子的组件,而不会导致 useEffect 在不应该触发时触发?
function Apple(props) {
const { text, cb } = props;
useEffect(() => {
pretendFetch().then(result => cb(result));
// eslint-plugin-react-hooks dictates that `cb` should be within the dependencies array
}, [cb]);
return <div>{text}</div>;
}
当组件被传递一个箭头函数时,cb
它将在每次渲染时触发 useEffect。理想情况下,它应该只使用一次回调,但我不能在[]
没有 eslint-plugin-react-hooks 发出警告的情况下作为依赖数组传递。我读过 useRef 可以用来包装回调,但这似乎是一个不令人满意的创可贴解决这个问题。
解决方案
这里的问题是回调函数会在每次渲染时重新创建,因此会触发useEffect
. 您可以通过使用useCallback
钩子将回调函数包装在覆盖组件中来更改此行为,就像我在此CodeSandbox中所做的那样
推荐阅读
- php - 如何将电子邮件输入到mysql数据库中
- javascript - 当我使用 react.js 投入生产时出错
- javascript - 不支持使用“requireCordovaModule”加载非cordova模块“q”
- c - 如何在 WM_PAINT 中绘制一个 Windows 按钮?
- python - ValueError:检查目标时出错:预期dense_8的形状为(10,),但数组的形状为(95,)
- jasmine - 失败:脚本超时:20 秒内未收到结果
- amazon-web-services - AWS CloudWatch:如何在 cloudwatch 规则中将媒体转换日志传递给 lamda 函数?
- javascript - 在 Laravel Mix 中转译 Material JS 的问题
- angular - 单击另一个 div 时更改类名
- javascript - 数字的正则表达式只允许空格和 1 个逗号或点