reactjs - 是否保证传递给 useEffect 的函数在调用组件后至少会被调用一次,即使在并发模式下也是如此?

标签 reactjs

当然,除非发生异常。

<小时/>

我找不到这个问题的明确答案。

在他们的reference中他们说 useSubscription 钩子(Hook)实现:

It is important not to subscribe while rendering because this can lead to memory leaks.

但尚不清楚是否可以在正文中实现不会导致内存泄漏的订阅,或者在正文中进行订阅最终吗?如果取消订阅发生在 useEffect 内部,则会导致内存泄漏。

我特别想知道这在并发模式下是否成立。

最佳答案

Is it guaranteed that the function passed to useEffect will be called at least once after the component is called, even in concurrent mode?

我认为这是无法保证的。

假设我们从没有安装您的组件的情况开始。渲染开始,并且您的组件属于需要渲染的组件,因此它被调用。但在提交之前,会出现更高优先级的更新,这会重新启动组件树一部分的渲染。在这个新的渲染中,组件的父组件决定不再需要您的组件。此渲染完成并提交,您的组件不在输出中。

在这一切开始之前它不存在,并且在提交之后它也不存在,因此它的效果不会运行。但在这个过程中它确实被调用了,所以组件体内的任何副作用都会发生。您现在已订阅了一个事件,无法取消订阅。

关于reactjs - 是否保证传递给 useEffect 的函数在调用组件后至少会被调用一次,即使在并发模式下也是如此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60229005/

相关文章:

reactjs - 测试库 React 与 Jest

css - 使用 NavBar 组件时 id 和 class 的区别?

node.js - React-dropzone-uploader AVI 文件卡在状态 "preparing"

javascript - 类型错误 : undefined is not an object (evaluating 'this.state.Gas' ) in React Native

reactjs - 本地主机和带有 Auth0 的 CORS 不允许我登录

reactjs - 在react-testing-library中,渲染应该只被调用一次吗?

javascript - 安装react-router-dom时遇到错误

node.js - 在前端代码中访问 NODE_ENV 是否有意义?

reactjs - 如何解决 jsx-a11y/no-static-element-interactions 限制?

reactjs - 图像未渲染但适用于 React Native Web Player