useState是怎么回事?

简介: useState是怎么回事?

这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战

Hooks意为钩子,React Hooks就是一堆钩子函数,React通过这些钩子函数对函数型组件进行增强,不同的钩子函数提供了不同的功能。钩子函数有一个特点,都是以use开头。

为函数组件提供状态

useState函数的内部是使用闭包来实现函数保存状态数据的。

useState的返回值是什么?

返回值是一个数组,数组的第一项是状态数据,第二项是设置状态数据的方法,关于这个第二项的命名,我们一般采用set+状态数据名的方法,请看下面的例子。

const [count,setCount] = useState(0);
复制代码

useState的细节

  1. 接收唯一的参数即状态初始值,初始值可以是任意数据类型。
  2. 返回值为数组,数组中存储状态值和更改状态值的方法,方法名称约定以set开头,后面加上状态名称。
  3. 方法可以被调用多次,用以保存不同的状态值。
  4. 参数可以是一个函数,函数返回什么,初始状态就是什么,函数只会被调用一次,用在初始值是动态值的情况。
function App(props) {
    const [count,setCount] = useState(() => {
        return props.count || 10;
    });
    const [person,setPerson] = useState({name: 'justin'})
    return (
        <div>
            <span>{count},{person.name}</span>
            <br />
            <button onClick={() => setCount(count + 1)}>+1</button>
            <button onClick={() => setPerson({name: '国家'})}>点击切换name</button>
        </div>
    )
}
复制代码

useState更新状态时是异步的

function App(props) {
    const [count,setCount] = useState(0);
    const [person,setPerson] = useState({name: 'justin'})
    function handleCount() {
        setCount(() => {
            return count + 1;
        })
        console.log(count);   // 打印的是0,说明是异步的
    }
    return (
        <div>
            <span>{count},{person.name}</span>
            <br />
            <button onClick={handleCount}>+1</button>
            <button onClick={() => setPerson({name: '国家'})}>点击切换name</button>
        </div>
    )
}
复制代码

读取state

在class的写法中,读取state需要使用this.state,但是在hook写法中,只需要直接使用状态的变量名即可。

为什么叫useState而不叫createState?

因为Create一词并不是很准确,因为state只在组件首次渲染的时候被创建,在下一次重新渲染的时候,useState返回给我们当前的state。

相关文章
|
JavaScript
Vue你不知到的$this.emit()的用法
Vue你不知到的$this.emit()的用法
Vue你不知到的$this.emit()的用法
|
7月前
|
缓存 前端开发
💡我居然用错了useMemo和useCallback这么久?
💡我居然用错了useMemo和useCallback这么久?
|
7月前
|
存储 前端开发 JavaScript
🤮是时候放弃useState了,🚀这么写React更丝滑🚀
🤮是时候放弃useState了,🚀这么写React更丝滑🚀
|
7月前
|
缓存 前端开发
🤔useMemo还可以这样用?useCallback:糟了,我成替身了!
🤔useMemo还可以这样用?useCallback:糟了,我成替身了!
|
7月前
|
前端开发
【ReactHooks 使用攻略】useState和useReducer的区别
一句话总结:useState用于简单的状态管理和局部状态更新,而useReducer用于复杂的状态逻辑和全局状态管理。
152 0
|
11月前
|
存储 前端开发 JavaScript
面试官:useEffect和useLayoutEffect有什么区别?
源码角度剖析useEffect和useLayoutEffect区别
104 0
面试官:useEffect和useLayoutEffect有什么区别?
|
JavaScript 算法 编译器
从 vue 源码看问题 —— vue 中的实例方法你学废了吗?
从 vue 源码看问题 —— vue 中的实例方法你学废了吗?
70 0
|
前端开发
#yyds干货盘点 【React工作记录二】React中setstate得回调用法
#yyds干货盘点 【React工作记录二】React中setstate得回调用法
71 0
|
前端开发
useState原理
每个函数组件对应一个React节点 每个节点保存着state和index (这个state可能描述不准确,但主要是让大家想清楚这个事情,应该是一个类似state的东西) useState会读取state[index] index由useState出现的顺序决定 setState会修改State,并触发更新
136 0
useState原理
|
存储 前端开发
React中的闭包陷阱以及如何使用useState姿势(I)
React中的闭包陷阱以及如何使用useState姿势
919 0
React中的闭包陷阱以及如何使用useState姿势(I)