当前位置: 首页 > news >正文

React 生命周期 - useEffect 介绍

在 React 中,useEffect 钩子可以被看作是函数组件中的一种副作用管理工具,它的行为可以模拟类组件中的不同生命周期方法。useEffect 的执行时机取决于其依赖项数组(第二个参数)的设置方式。

根据 useEffect 的使用方式,它可以对应以下几种类组件生命周期方法:

1、 componentDidMount(组件挂载)

当你传递一个空的依赖数组 [] 时,useEffect 相当于 componentDidMount,即只在组件首次挂载时运行。

useEffect(() => {// 只在组件首次挂载时运行console.log('Component mounted');
}, []); // 空数组作为依赖项

等效于类组件的:

componentDidMount() {console.log('Component mounted');
}

2、 componentDidUpdate(组件更新)

如果 useEffect 的依赖数组中包含某些特定的状态或 props,当这些值发生变化时,useEffect 会在组件更新时重新执行,相当于 componentDidUpdate。

useEffect(() => {// 只在组件首次挂载时运行console.log('Component mounted');
}, []); // 空数组作为依赖项

等效于类组件的:

componentDidUpdate(prevProps, prevState) {if (prevState.someState !== this.state.someState) {console.log('Component updated because "someState" changed');}
}

3、 componentWillUnmount(组件卸载)

useEffect 可以返回一个清理函数,这个清理函数在组件卸载时(或依赖项更新时)执行,相当于 componentWillUnmount。

useEffect(() => {console.log('Component mounted');return () => {console.log('Component will unmount');};
}, []); // 空数组,表示只在卸载时清理

等效于类组件的:
componentWillUnmount() {
console.log(‘Component will unmount’);
}

4、 componentDidMount + componentDidUpdate

如果不传递依赖数组,useEffect 会在每次组件渲染后执行,相当于同时模拟了 componentDidMount 和 componentDidUpdate。

useEffect(() => {console.log('Component mounted or updated');
});

等效于类组件的:

componentDidMount() {console.log('Component mounted');
}componentDidUpdate() {console.log('Component updated');
}

5、React生命周期总结

React 17版本之前
在这里插入图片描述

React 17版本之后
在这里插入图片描述
在新的生命周期中,react弃用了componentWillMount、componentWillReceiveProps、componentWillUpdate这三个钩子,取而代之的是getDerivedStateFromProps,其实就是把那三个钩子的含义融入到了这一个钩子中,写法如下:

static getDerivedStateFromProps(props, state) {console.log('getDerivedStateFromProps---props, state:', props, state)// 如果return null 则依然以原来的规则更新state,否则会锁定更新statereturn null// return {a:11}}

http://www.mrgr.cn/news/39785.html

相关文章:

  • 普通人怎样才能找到可靠的副业?
  • 局部整体(七)利用python绘制圆形嵌套图
  • LangChain进阶技巧:提高聊天机器人性能的策略[第三课]
  • Linux内核 -- 读写文件系统文件之kernel_read与kernel_write
  • SpringBoot整合weixin-java-pay实现微信小程序支付
  • 高效开发:SpringBoot网上租赁系统实现细节
  • Leetcode 981. 基于时间的键值存储
  • 随手记:ul-table表格合并方法
  • 工业交换机的RMON
  • java中有两个list列表,尽量少的去循环
  • 2024 年 25 款最佳入侵检测软件推荐 - 网络安全必备,零基础入门到精通,收藏这一篇就够了
  • 谷歌浏览器完美清除缓存
  • 一图看懂好利来老鼠接奶酪SVG交互|伸长+滑动叠加排版|E2.COOL黑科技SVG编辑器
  • 匿名管道 Linux
  • 前端css样式设置元素的绝对定位和相对定位,要注意宽度和高度的设置
  • 一条命令Docker安装常用桌面linux系统含一些系统和应用
  • 数据结构(链表的操作算法)
  • 不带头结点单链表逆置递归实现---未验证
  • 如何选择合适的量化交易策略,回测与模拟交易的实战演练
  • java-netty客户端断线重启0.9.0