react hook

import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";

function Demo() {
  // 作用函数
  const [count, setCount] = useState(0);
  // 副作用函数   可以有多个
  // 相当于 componentDidMount 和 componentDidUpdate:
  // 相当于 第一次渲染完成后 和 每次更行渲染完成后
  // 默认情况下,React 会在每次渲染后调用副作用函数 —— 包括第一次渲染的时候
  useEffect(() => {
    const title = `You clicked ${count} times`;
    console.log(title);
    //会在下一次render前或销毁组件前运行 componentWillUnmount
    return () => {
      console.log("清除count副作用");
    };
  });

  const [title, setTitle] = useState("这是标题");
  useEffect(() => {
    console.log(title);
    //会在下一次render前或销毁组件前运行  componentWillUnmount
    return () => {
      console.log("清除title副作用");
    };
  });
  // 注意 useEffect 的return 函数 在第一次渲染完成后 不会执行
  // 在以后(除第一次)每次render前会先执行 return(多个useEffect 会先把所有的return 执行完)
  // 然后再执行 useEffect 中的内容

  return (
    <div>
      <p>this is {title} title</p>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
      <button onClick={() => setTitle("eeeeeeee")}>
        Click me change title
      </button>
    </div>
  );
}

ReactDOM.render(<Demo />, document.getElementById("container"));

注意:

useEffect 第一个参数时一个effectCallback函数,形式为:() => (void | (() => void | undefined)),如果useEffect没有第二个参数,effectCallback会在每次渲染后调用(包括第一次),相当于componentDidMount+componentDidupdate,但是effectCallback往往还会return一个函数,它的角色类似componentWillUnmount,会在下一次render前或销毁组件前运行。

useEffect 第二参数为数组,它的角色有点类似于componentShouldUpdate,一般来说它由state和props中的数据构成,每次render,useEffect会比较这个数组与上次render时是否完全一致,如果一致,effectCallback就不会再次执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值