千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  关于学院  >  技术干货  >  html5技术干货  >  正文

hooks模拟生命周期

来源:千锋教育
发布时间:2022-12-28 16:39:45
分享

hooks模拟生命周期

  在React16.8 之前,函数组件只能是无状态组件,也不能访问react生命周期。hook做为react新增特性,可以让我们在不编写class的情况下使用state以及其他的react特性,例如生命周期。

  接下来我们便举例说明如何使用hooks来模拟比较常见的class组件生命周期。

  1. hooks模拟componentDidMount useEffect拥有两个参数:

  第一个参数作为回调函数会在浏览器布局和绘制完成后调用,因此它不会阻碍浏览器的渲染进程。

  第二个参数是一个数组

  - 当数组存在并有值时,如果数组中的任何值发生更改,则每次渲染后都会触发回调。

  - 当它不存在时,每次渲染后都会触发回调。

  - 当它是一个空列表时,回调只会被触发一次,类似于 componentDidMount。 useEffect(()=>{console.log('第一次渲染时调用')},[])

  2. hooks模拟shouldComponentUpdate React.memo包裹一个组件来对它的props进行浅比较,但这不是一个hooks,因为它的写法和hooks不同,其实React.memo等效于 PureComponent,但它只比较 props。 const MyComponent = React.memo( _MyComponent, (prevProps, nextProps) => nextProps.count !== prevProps.count )

  3. hooks模拟componentDidUpdate没有第二个参数代表监听所有的属性更新useEffect(()=>{console.log('任意属性该改变')}) 监听多个属性的变化需要将属性作为数组传入第二个参数。useEffect(()=>{console.log('n变了')},[n,m])

  4. hooks模拟componentWillUnmount通常,组件卸载时需要清除effect创建的诸如订阅或计时器ID等资源useEffect函数返回的函数可以表示组件卸载了useEffect(()=>{ const timer = setTimeout(()=>{ ... },1000) return()=>{ console.log('组件卸载了') clearTimerout(timer) } })

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

相关推荐

  • vue配置跨域怎么操作 Vue配置跨域的操作非常简单。在Vue项目中,我们可以通过配置webpack来实现跨域请求。在Vue项目的根目录下找到config文件夹,然后打开index.js文件。在该文件中,我们可以找到一个名为
  • npm包管理工具有什么用途? npm(NodePackageManager)是JavaScript生态系统中最常用的包管理工具。它是随同Node.js安装的,默认包含在Node.js的安装包中。npm允许开发者轻松地安装、更新、卸
  • vue事件修饰符有哪些? 在Vue.js中,事件修饰符是一种用于修改事件触发行为的特殊修饰符。以下是常用的事件修饰符:1.`.stop`:阻止事件继续传播,即阻止事件冒泡。2.`.prevent`:阻止事件默认行为。3.`.c
  • vue路由守卫有哪些? 在Vue.js中,路由守卫是一种用于控制导航的机制,它允许您在路由切换前后执行相应的操作。VueRouter提供了三种类型的路由守卫:1.全局前置守卫(GlobalBeforeGuards):-`be
  • css绝对定位和相对定位 CSS中的绝对定位(absolutepositioning)和相对定位(relativepositioning)是用于控制元素在页面布局中的位置的两种常见定位方式。1.绝对定位(absolutepos
  • npm安装less用法介绍 npm(NodePackageManager)是Node.js的包管理器,它允许您安装、管理和共享JavaScript模块。要安装和使用Less(一种CSS预处理器),您可以按照以下步骤进行操作:1.