我的组件中有一个useEffect
钩子,该钩子调用Redux动作来获取一些数据。
useEffect(
() => {
props.getClientSummaryAction();
},[]
);
当我去保存文件时,lint会这样做。
useEffect(
() => {
props.getClientSummaryAction();
}, [props]
);
显然getClientSummaryAction
将我的组件发送到一个无限循环中,因为它获取了一些更新道具的数据。
我已经使用过这样的解构方法,而linter会更新数组。
const { getClientSummaryAction } = props;
useEffect(
() => {
getClientSummaryAction();
},
[getClientSummaryAction]
);
我很满意,但这没有任何意义,因为getClientSummaryAction
显然不会被更新,它是一个函数。
我只想知道短绒棉为什么要这样做以及这是否是最佳实践。
答案 0 :(得分:1)
这不是不必要的。您知道一个依赖关系不会改变的事实,但是React
可能知道这一点。规则很明确:
要么传递包含所有依赖项的数组,要么不传递任何内容给第二个参数,然后让
React
跟踪更改。
将第二个参数传递给useEffect
是为了告诉React您负责挂接的呼叫。因此,当您不传递效果eslint
中包含的依赖项时,这将视为可能的内存泄漏并发出警告。 DO NOT disable the rule就像您已经做的那样继续传递依赖关系。可能会觉得多余,但这是最好的。