react常用生命周期钩子

303 阅读2分钟

constructor()

  • 初始化props
  • 初始化state,但此时并不能调用setState
  • 用于写bind
  • constructor不写也可以,要写就写完整)

shouldComponentUpdate()

根据返回值来判断是否更新UI,在开发过程中,可以根据应用场景灵活设置返回值,避免不必要的更新

shouldComponentUpdate接受两个参数,第一个参数为newProps,第二个为newState


render()

  • 展示视图
  • render中只能有一个根元素,若有两个根元素,可以使用<React.Fragment>包起来
  • 嫌太长?<React.Fragment></React.Fragment>可以简写为<></>

使用技巧

  1. 里面可以写if...else
  2. 可以写?:表达式
  3. 不能直接写for循环,需要配合数组使用
  4. 可以写array.map

componentDidMount()

  • 在元素插入(挂载到)页面后执行这些代码,这些代码依赖DOM
  • 如果想获取div的高度,最好就写在这里面
  • 此处可以发起加载数据的AJAX请求(官方推荐)
  • 首次渲染就会执行该钩子

componentDidUpdate()

  • 在视图更新后执行代码
  • 此处也可以发起加载数据的AJAX请求,用于更新数据
  • 首次渲染不会执行该钩子
  • 在此处使用setState有可能引起无限循环(setState导致更新,更新又触发setStatesetState又导致更新,两者不停的相互调用),除非放到条件判断中,所以不太建议在这里使用setState
  • shouldComponentUpdate()判断返回了false,则ui不会更新,该钩子也不会触发

可接受三个参数,详细可查看文档


componentWillUnmount()

  • 组件将要被移出页面然后被销毁(卸载)时执行代码
  • unmount过的组件不会再次mount了

如果之前在componentDidMount()中进行了监听、计时器或AJAX请求,则一定要在该钩子中取消请求,否则会浪费内存

//很多网站越来越占内存也可能跟这个有关,也许可以不写,但一定要知道