javascript - 在 UseEffect 中使用 `dispatch` 钩子
问题描述
dispatch
当我的 React 组件卸载时,我想采取一些行动。因为我正在使用钩子,所以我不能使用componentWillUnmount
. 相反,我使用的是useEffect
钩子:
const dispatch = useDispatch();
useEffect(() => () => dispatch(setValue()), []);
上面的代码抛出警告“React Hook useEffect 缺少依赖项:'dispatch'。要么包含它,要么删除依赖项数组”。我不能包含dispatch
在依赖项数组中,因为它会在更改useEffect
时运行dispatch
,但我希望它仅在组件卸载时运行;为此,我需要传递一个空数组。
如何在不从 babel 中删除相应的 linting 规则的情况下修复此警告?
解决方案
dispatch
不应该改变,它是 redux store 提供的 dispatch 函数。然而,react hook linter 只是将其视为一个函数,并警告您它可能会发生变异。我认为您有语法错误,缺少括号。我认为应该是
useEffect(() => () => dispatch(setValue()), []);
不过,如有必要,您可以忽略该行的规则
// eslint-disable-next-line react-hooks/exhaustive-deps
用法
// eslint-disable-next-line react-hooks/exhaustive-deps
useEffect(() => () => dispatch(setValue()), []);
或(IMO 更容易阅读)
useEffect(() => {
return () => dispatch(setValue());
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
推荐阅读
- html - 从 AWS S3 发送邮件时遇到问题
- python - 在 Mac 上的 pyzo 中保存动画
- python - Python CX_Oracle:如何在另一个查询中使用返回的元组
- asp.net-core - 在 Vue.js 站点上使用带有 HardSource 的 Webpack 意外和神秘的 dotnet 运行“失败”消息
- c# - QR 解码不适用于 ZXing 和 Aforge
- python - 在 pandas 中获取最后一分钟的所有行
- javascript - 确保仅在前一个函数完成运行时才调用 JavaScript 函数
- python - pyautogui.click() 在另一个程序上不起作用
- sql-server - 在 SQL Server 2017 中从 XML 查询值
- ios - 如何将导航按钮一直限制在左侧或右侧?(iOS)