useState理解与使用

144 阅读2分钟

本文针对useState以下3个方面进行记录:

1.useState使用;

2.setState作用:重新渲染组件(同步和异步中使用效果不同);

3.多次设置setState如何渲染?在事件处理函数或useEffect中批量渲染(包含异步时分多次渲染);

一、useState基本使用

  1. useState基本作用:在组件中添加状态变量,如下代码:
const App: React.FC = () => {
const [number, setNumber] = useState(0); // number状态变量,首次加载初值为0;setNumber更改number值,触发重新渲染
const onClick = () => {
    setNumber(number+1);
}
return (
    <>
        <span style={{marginRight: '20px'}}>number: {number}</span>
        <Button type='primary' onClick={onClick}>修改number</Button>
    </>
);
}
  1. 代码和实现效果 image.png

二、setState作用:重新渲染组件

  1. setNumber()重新渲染组件,在同步和异步函数中表现不一样

  2. 同步和异步中调用setState区别:

    1)useEffect中同步调用setState()

    useEffect(()=>setNumber(5),[]),初次渲染(number显示初始值)后重新触发渲染(number=5)。最终效果:用户只看到number: 5,由于两次渲染间隔短

    0s和5s效果图(首次和重新加载): image.png

    2)useEffect中异步调用setState()

    useEffect(()=>{setTimeout(()=>setNumber(5), 5000)}, []),初次渲染(number显示初始值)后重新触发渲染(number=5)。最终效果:用户可以看到number: 0和number: 5,由于两次渲染间隔5s。

    0s效果图(首次加载): image.png

    5s效果图(重新加载) image.png

三、多次设置setState如何渲染

  1. 多次调用setState(),会进行批量处理,但在同步和异步函数中表现不一样

  2. 同步和异步中多次调用setState区别:

    1)onClick同步调用setNumber()

    onClick多次调用setNumber,批量处理setNumber,只触发一次渲染

    0s和5s效果图: image.png

    2)useEffect中异步调用setNumber()

    onClick多次调用setNumber,由于异步,触发两次渲染, 0s效果图(首次加载):

    image.png

    5s效果图(重新渲染)

    image.png