您要请求功能还是报告错误?
关于useEffect
API 设计问题
目前的行为是什么?
目前useEffect
在每次渲染上运行。 当您忘记传递第二个参数时,这种默认行为在处理 HTTP 请求等情况下可能很危险。 这似乎是一个常见的错误,特别是对于像我这样的新人。 我想不出很多(任何)模式你想在每次渲染时运行useEffect
。 不默认运行一次的原因是什么?
通过 API 设计:
useEffect(
() => {
// do something
},
[/* dependency list */]
);
useEffect
只会在依赖列表改变时运行,空数组[]
表示没有依赖(即只会运行一次)。 对我来说,未定义的依赖项列表意味着每次渲染都运行由useEffect
包装的函数。
我想不出很多(任何)模式你想在每次渲染时运行
useEffect
。 不默认运行一次的原因是什么?
假设您对 React 非常陌生,并且您想在useState
变量发生变化时做一些事情(例如将新值 POST 到服务器)。
useEffect
回调。我认为依赖项列表旨在更多地进行性能优化/帮助代码简化。
当前的 API 允许您在以下行为之间做出决定:
componentDidMount
+ componentDidUpdate
行为。componentDidMount
行为。this.props
和prevProps
实现相同的功能。您描述的“默认”行为(当您没有明确指定依赖项时)通常是最安全的,因为它可以防止在闭包中使用陈旧的值。
在未来,希望我们能提供某种类型的编译器来帮助自动化很多。 同时,我们提供了一个官方的 ESLint 插件来帮助