我试图将我的头围绕在 react 的新 hooks api 上。具体来说,我正在尝试构建曾经如下的经典用例:
componentDidUpdate(prevProps) {
if (prevProps.foo !== this.props.foo) {
// animate dom elements here...
this.animateSomething(this.ref, this.props.onAnimationComplete);
}
}
现在,我尝试使用函数组件 and 来构建相同的组件useEffect
,但不知道该怎么做。这是我尝试过的:
useEffect(() => {
animateSomething(ref, props.onAnimationComplete);
}, [props.foo]);
这样,效果只在 props.foo 改变时调用。这确实有效——但是!这似乎是一种反模式,因为将其eslint-plugin-react-hooks
标记为错误。效果中使用的所有依赖项都应在依赖项数组中声明。所以这意味着我必须执行以下操作:
useEffect(() => {
animateSomething(ref, props.onAnimationComplete);
}, [props.foo, ref, props.onAnimationComplete]);
这不会导致 linting 错误,但它完全违背了仅在props.foo
更改时调用效果的目的。我不想在其他props或 ref 更改时调用它。
现在,我读了一些关于 usinguseCallback
来包装它的内容。我试过了,但没有进一步。
有人可以帮忙吗?