【问题标题】:Why are function dependencies treated differently than other dependencies?为什么函数依赖项的处理方式与其他依赖项不同?
【发布时间】:2020-03-20 16:17:45
【问题描述】:

如果我有:useCallback(() => setData(props.data), [])

然后详尽的部门会要求我将 props.data 添加到依赖项中。

但是,如果我有:useCallback(() => setData(props.getData()), [])

然后详尽的 deps 会要求我将 props 添加到依赖项中,并告诉我应该解构它,因为 props 会改变每次渲染。

所以我的问题是,如果 props.getData 适用于非功能道具,为什么我不能将其添加到我的依赖项中?

【问题讨论】:

  • 我不知道规则的细节,但是当您将函数作为“方法”调用时,这就是props.getData()正在做的事情,那么getData可以访问props通过this。这意味着,函数props.getData 可能不会改变,但props 可能会改变,因此调用函数的结果可能会有所不同,即使函数本身没有改变。
  • @FelixKling 那么解构函数(const getData = props.getData)将不再与 props 中的同一个“this”绑定?还是会永远与特定版本的道具绑定?
  • 如果一开始它是一个普通函数(不是箭头函数),那么它将看到this === undefined,除非你用bind、call或apply显式设置它.

标签: reactjs react-hooks eslint


【解决方案1】:

这可能是 JavaScript 分配内存的方式。

当您创建变量时,例如const x = 'myString' JavaScript 将为字符串分配内存,它对对象、数字和被视为“可调用对象”的函数做不同的事情。

因此,通过将 props.getData 解构为 const { getData } = props,您所做的是为 getData 创建一个新指针,这意味着将其添加为依赖项,它将独立于 props 处理。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 2014-12-09
    • 2013-04-17
    • 2013-10-12
    • 2013-06-22
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多