useState

331 阅读2分钟

useState <函数组件>

hook在class组件内部不起作用,但是他可以用来替代class

hook是什么

它可以让使用者钩入react的特性

使用场景

当在编写函数组件的时候,需要添加状态state,使用hook

使用hook声明state

import React, { useState } from 'react';

function App() {
    // 声明一个叫 “count” 的 state 变量
    const [count, setCount] = useState(0)

    // .....
}

执行useState做了啥

  1. useState会返回一个数组, 上面使用了数组解构,获取了返回数组的第一个和第二个参数([count, setCount]),count值为useState的传入参数,setCount是用来修改count值的函数(并且会触发App函数重新执行)
  2. App函数在执行完之后就退出了,如果不使用hook,里面的局部变量都不会被保存,当第二次执行的时候又会是初始值。
  3. App函数中使用了hook所有这些变量都被保存下来了,下次在执行App函数,useState函数就会返回之前的count值,状态得到了保存。

useState需要哪些参数

  1. 参数就需要一个,类型Any。用来赋值给他返回数组的第一项。

useState 的返回值

返回值正如上面说的,返回一个数组

读取state

因为是函数内部的变量,所以在App内部直接读取就好

<!-- 只要是函数内部,任意位置都可以访问得到 -->
<p>count is {count}</p>

更新state

更新state只能使用上面提到的setCount函数,因为它能触发App函数再次执行,并且视图也会跟着更新

<!-- 只要是函数内部,任意位置都可以访问得到 -->
<p>count is {count}</p>

useState 返回的设置函数 const [count, setCount] = useState(0)

const [count, setCount] = useState(0)
setCount(2) // ok
//type SetStateAction<S> = S | ((prevState: S) => S);
setCount((c) => { 
    //《《《最新的》》》《《《最新的》》》《《《最新的》》》《《《最新的》》》
    //回调的参数c是count的上一个值,《《《最新的》》》。在某些时候会用到
    return c 
}) // ok