欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

react Hooks :useEffect的使用

程序员文章站 2022-05-29 11:57:19
...

什么是副作用?
在特定的状态、节点、时机下,要做特定的行为,这些行为置身于组件渲染之后,通通称之为副作用,绑定事件,网络请求,访问DOM元素,通通称之为副作用,副作用时机在Mount之后,Update之后,Unmount之前,这三者分别是ComponentDidMount,componentDidUpdate,componentWillUnmount

useEffect怎么用?
useEffect在render之后调用,也可以通过自定义状态来决定调用和不调用,第一次调用相当于ComponentDidMount,之后调用相当于componentDidUpdate,useEffect的调用不仅仅代表一个函数的执行,还可以返回另一个回调函数,是清除上一次副作用遗留下来的状态,会在下一次渲染之前执行

react类组件 实现副作用


import React, { Component } from 'react'

class App extends Component {
  state = {
    count: 0,
    size: {
      width: document.documentElement.clientWidth,
      height: document.documentElement.clientHeight
    }
  }
  onResize = () => {
    this.setState({
      size: {
        width: document.documentElement.clientWidth,
        height: document.documentElement.clientHeight
      }
    })
  }
  componentDidMount() {
    document.title = this.state.count;
    window.addEventListener('resize', this.onResize, false);//监听resize事件绑定到onResize方法上
  }
  componentDidUpdate() {
    document.title = this.state.count
  }
  componentWillUnmount() {
    window.removeEventListener('resize', this.onResize, false);//解绑该resize事件
  }
  render() {
    const { count, size } = this.state
    return (
      <div>
        <button
          type="button"
          onClick={() => this.setState({ count: count + 1 })}
        >
          Click({count})
          size:{size.width} | {size.height}
        </button>
      </div>
    )
  }
}


export default App



react函数组件 实现副作用

import React, { useState, useEffect } from 'react'

function APP(props) {

  const [count, setCount] = useState(0)
  const [size, setSize] = useState(
    {
      width: document.documentElement.clientWidth,
      height: document.documentElement.clientHeight
    }
  )
  const onResize = () => {
    setSize(
      {
        width: document.documentElement.clientWidth,
        height: document.documentElement.clientHeight
      }
    )
  }

  useEffect(() => {
    document.title = count;
  })

  useEffect(() => {
    window.addEventListener('resize', onResize, false);//监听resize事件绑定到onResize方法上
    return () => {
      window.removeEventListener('resize', onResize, false);//解绑该resize事件
    };
    //return出一个回调函数。回调函数在视图销毁之前,两种销毁原因,一是重渲染,二是组件卸载
  }, [])
  //useEffect第二个必须是一个数组,只有数组每一项都不变时候再能阻止Effect执行
  //当useEffect第二个参数为空数组,Effect调用一次后就不再调用,回调函数也只有在组件卸载时候调用
  return (
    <div>
      <button
        type="button"
        onClick={() => { setCount(count + 1) }}
      >
        Click({count})
        size:{size.width} | {size.height}
      </button>
    </div>
  )
}

export default APP
相关标签: react.js react