React中useEffect使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React中useEffect使用相关的知识,希望对你有一定的参考价值。

参考技术A 之前我们已经掌握了useState的使用,在 class 中,我们通过在构造函数中设置 this.state 为 count: 0 来初始化 count state 为 0 :

在函数组件中,我们没有 this ,所以我们不能分配或读取 this.state 。我们直接在组件中调用 useState Hook:

既然我们知道了 useState 的作用,那么掌握 useEffect 就更容易,函数组件中没有生命周期,那么可以使用 useEffect 来替代。如果你熟悉 React class 的生命周期函数,你可以把 useEffect Hook 看做 componentDidMount , componentDidUpdate 和 componentWillUnmount 这三个函数的组合。

使用 Hook 的示例

默认情况下,它在第一次渲染之后和每次更新之后都会执行。你可能会更容易接受 effect 发生在“渲染之后”这种概念,不用再去考虑“挂载”还是“更新”。React 保证了每次运行 effect 的同时,DOM 都已经更新完毕。

数据获取,设置订阅以及手动更改 React 组件中的 DOM 都属于副作用。有些副作用可能需要清除,所以需要返回一个函数,比如挂载时设置定时器,卸载时取消定时器。

使用 Hook 的示例

你可以通知 React 跳过对 effect 的调用,只要传递数组作为 useEffect 的第二个可选参数即可,如果想执行只运行一次的 effect(仅在组件挂载和卸载时执行),可以传递一个空数组( [] )作为第二个参数。这就告诉 React 你的 effect 不依赖于 props 或 state 中的任何值,所以它永远都不需要重复执行。

通过跳过 Effect 进行性能优化,在某些情况下,每次渲染后都执行清理或者执行 effect 可能会导致性能问题。在 class 组件中,我们可以通过在 componentDidUpdate 中添加对 prevProps 或 prevState 的比较逻辑解决:

这是很常见的需求,所以它被内置到了 useEffect 的 Hook API 中。如果某些特定值在两次重渲染之间没有发生变化,你可以通知 React 跳过对 effect 的调用,只要传递数组作为 useEffect 的第二个可选参数即可:

你已经学习了 State Hook 和 Effect Hook,将它们结合起来你可以做很多事情了。它们涵盖了大多数使用 class 的用例。

以上是关于React中useEffect使用的主要内容,如果未能解决你的问题,请参考以下文章

react组件初始化接口请求有多个异步依赖参数

为啥在组件加载时不调用 useEffect(()=...,[]) ?

React - 是不是在 useEffect 中调用 API

React中useEffect使用

React - nextjs 在 useEffect 中调用自定义钩子

如何在 React 的函数中获取 useEffect?