react之useState、useEffect

一、useState

  • react 函数式组件的状态
import { useState, useEffect } from 'react';
import { Button } from 'antd';

const StateDemo = () => {
  const [count, setCount] = useState<number>(0);

  return (
    <div>
      <p>count: { count }</p>
      <Button onClick={() => setCount(count + 1)}>+</Button>
      <Button onClick={() => setCount(count - 1)}>-</Button>
    </div>
  );
};

export default StateDemo;
  • count 相当于class组件中的 this.state = { count: 0 }
  • setCount 相当于class组件中的 setState({ count: count + 1 })
  • useState函数的参数就是 count 的初始值,如果初始值比较复杂需要逻辑处理,那么使用箭头函数
const [count, setCount] = useState<number>(() => {
  const a = 0;
  return a;
});
  • 注意!setCount是异步函数,如果想在修改count立即使用,可以用箭头函数
// 异步
const add = () => {
  setCount(count + 1);
  alert(count); // 打印值:0
};
// 同步
const add2 = () => {
  setCount(state => {
    const newCount = state + 1;
    alert(newCount); // 打印值:1
    return newCount;
  });
};

二、useEffect

  • 官方解释在这里插入图片描述
  • 相当于 componentDidMount 的用法,DOM首次加载完后执行一次。
    注意!一定要避免在这种用法中去更新useState里的值因为每次更新完useState里的值,都会再次执行useEffect。
    解决办法继续往下看
  useEffect(() => {
    console.log(count); // DOM首次渲染完后执行一次,组件每次更新完也会执行
  });
  • 相当于 componentDidUpdate 的用法
    useEffect第二个参数数组类型 []:指定useState声明的某个变量更新时,才去执行 Effect 函数
    如果放个空数组,那么Effect只会组件首次渲染的时候执行一次,不会执行第二次
    useEffect可以放多个
  useEffect(() => {
    console.log(count); // useState赋初始值时会执行一次,后面就只有当 count 更新的时候才会执行
  }, [count]);

  useEffect(() => {
    // 初始化数据可以在此使用,只执行一次
  }, []);
  • 相当于 componentWillUnmount 的用法
  useEffect(() => {
    // 创建一个计时器
    const timer = setInterval(() => {
      console.log(new Date());
    }, 1000);

    return () => clearInterval(timer); // 组件卸载时清除计时器
    
  }, []);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值