美文网首页
react hooks 之 useEffect

react hooks 之 useEffect

作者: my木子 | 来源:发表于2021-08-26 16:14 被阅读0次

useEffect

  • useEffect 可以弥补函数组件没有生命周期的缺点。我们可以在useEffect第一个参数回调函数中,做一些请求数据,事件监听等操作,第二个参数作为 dep 依赖项,当依赖项发生变化,重新执行第一个函数。
  • useEffect 看做 componentDidMountcomponentDidUpdatecomponentWillUnmount 这三个函数的组合。
  • useEffect 执行顺序:组件更新挂载完成 => 浏览器 DOM 绘制完成 => 执行 useEffect 回调。
  • 在 React 更新 DOM 之后运行一些额外的代码。比如发送网络请求,手动变更 DOM,记录日志,这些都是常见的无需清除的操作。
import React, { useEffect, useState } from "react";
import './App.css';

function App() {
    let [num1, setNum1] = useState(0);
    let [num2, setNum2] = useState(0);

    const add1 = () =>{
      setNum1(num1+1);
    }
    const add2 = () =>{
      setNum2(num2+1);
    }

  // 实时监听所有
  // useEffect(()=>{
  //   console.log('num1', num1);
  //   console.log('num2', num2);
  //   console.log('============');
  // })

  // 只在初次渲染时监听
  // useEffect(()=>{
  //   console.log('num1', num1);
  //   console.log('num2', num2);
  //   console.log('============');
  // },[])

  // 实时监听 num1
  useEffect(()=>{
    console.log('num1', num1);
    console.log('num2', num2);
    console.log('============');
  },[num1]);



  return (
      <div className="App">
        <h1 onClick={add1}>num1:{num1}</h1>
        <h1 onClick={add2}>num2:{num2}</h1>
    </div>
  );
}

export default App;

  • useEffect 返一个函数用于清除事件监听等操作。
import React, { useEffect, useState } from "react";
import './App.css';

/* 定时器 延时器等 */
const timer = setInterval(()=>console.log('setInterval'), 1000);

/* 模拟事件监听处理函数 */
const handleResize =()=>{
  console.log('handleResize');
}
/* 事件监听 */
window.addEventListener('resize', handleResize);

function App() {
    let [num1, setNum1] = useState(0);

    const add1 = () =>{
      setNum1(num1+1);
    }

    // num1的值变化时清除
    useEffect(()=>{
      return function(){
        console.log('num1 值变化了');
        clearInterval(timer);
        window.removeEventListener('resize', handleResize);
      }
    }, [num1]);

    return (
        <div className="App">
          <h1 onClick={add1}>num1:{num1}</h1>
      </div>
    );
}

export default App;

相关文章

网友评论

      本文标题:react hooks 之 useEffect

      本文链接:https://www.haomeiwen.com/subject/gpbdiltx.html