javascript - 使用 useEffect 跟踪一个 prop,它依赖于多个 prop
问题描述
有一个看起来像这样的代码:
const MyComponent: React.FC<MyComponentProps> = ({
trackMyChanges,
iChangeEverySecond
}) =>
{
// React Hook useEffect has missing dependencies: 'iChangeEverySecond'
useEffect(() => {
calculateData(trackMyChanges, iChangeEverySecond);
}, [trackMyChanges]);
return <> ... </>;
}
calculateData
如果trackMyChanges
道具已更改,代码将执行。它工作正常,但我收到一个警告,提示iChangeEverySecond
缺少依赖项。不过,我不希望钩子运行,因为iChangeEverySecond
已经更改。处理这种情况的正确方法是什么?
解决方案
您可以使用 useCallback 挂钩来解决此问题:
const calculateData = useCallback(() => {
console.log(iChangeEverySecond);
}, [iChangeEverySecond]);
useEffect(() => {
calculateData(trackMyChanges);
}, [trackMyChanges, calculateData]);
因此,每次您的 iChangeEverySecond 更改时,它都会将您的 calculateData 函数重新定义为它的最新版本,但它只会在 trackMyChanges 更改时触发。
推荐阅读
- c++ - lpBinaryPathName 参数的 CreateService 和引号
- regex - 使用 Notepad++ 删除 : 之后少于或等于 5 个字符的行
- node.js - 从 JSON 文件以编程方式创建对话框
- python - ImportError:无法导入名称 HTMLParser
- ruby-on-rails - 本地 rake 任务需要开发 gems 在生产组中
- haskell - 用于嵌套容器的索引镜头
- r - R:如果 colA 中的 8 个字符的子字符串等于 colB 中的 8 个字符的子字符串,则将 colA 的值添加到新的 colC
- java - 下载网页内容 - 长时间下载
- systemd - 未知 systemd 调用类似 weirf 的命令
- file - Spring Boot-Camel 应用程序中的文件轮询器实现