【发布时间】:2020-07-14 18:49:46
【问题描述】:
查看文档,this section [已编辑链接] 底部有一条注释,看起来好像只有 props 或 state 应该在挂钩依赖项列表中使用。但是,当在列表中使用 props 或 state 上的“复杂表达式”时,eslint 插件会给出以下内容:
React Hook useEffect 在依赖数组中有一个复杂的表达式。将其提取到一个单独的变量中,以便对其进行静态检查。 eslint(react-hooks/exhaustive-deps)
这让我思考什么可以用作依赖项。我们可以使用从 props 计算的局部变量吗?在这种情况下,我们是否需要创建某种新的状态变量或 ref?我不确定钩子是在组件内就地执行(因此局部变量可用)还是从渲染的上下文中提升(所以我们必须只使用状态、道具或其他钩子值,如 refs/memos )。
示例
一个组件有一个道具,数据,它是一个对象。
data: {
name: 'name',
id: 2
}
1) 看起来data.name 可以在依赖项中使用。但是我们可以使用设置为属性的局部变量吗?
const { name } = data;
useEffect(fn, [name]);
2) 我们能否使用由依赖数组中的 prop 计算的变量?
const isOdd = Boolean(data.id % 2);
useEffect(fn, [isOdd]);
这两种情况似乎都适用于小型测试。我对 Hooks 不够了解,无法知道它是否违反了一些规则,从而导致结果不确定。
【问题讨论】:
-
"...看起来好像只有 props 或 state 应该用在钩子依赖列表中" 你是怎么得出这个结论的?除了
useState可以访问自己的本地状态之外,真的没有提到状态或道具。 -
我打开了太多标签并复制了错误的链接。更新了正确的链接。 reactjs.org/docs/…
标签: reactjs react-hooks