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 安全
useEffect 与 useLayoutEffect区别
useEffect 与 useLayoutEffect区别
86 0
|
2月前
|
前端开发 JavaScript 开发者
useEffect 钩子详解与实战
【10月更文挑战第3天】React 作为一个流行的 JavaScript 库,通过 Hooks 大幅简化了组件开发。`useEffect` 是一个核心 Hook,用于处理函数组件中的副作用操作,如数据获取和 DOM 更改。本文详细介绍了 `useEffect` 的基本语法、常见用法及示例,包括模拟 `componentDidMount`、`componentDidUpdate` 和 `componentWillUnmount`。此外,还探讨了如何避免无限循环渲染和内存泄漏等问题,并提供了相应的解决方案,帮助开发者更好地理解和应用 `useEffect`,提升应用程序的性能与稳定性。
60 7
|
5月前
|
存储 缓存 JavaScript
useEffect问题之非state数据是否可以在useEffect中使用
useEffect问题之非state数据是否可以在useEffect中使用
|
7月前
|
存储 缓存 前端开发
我知道你想用useEffect,但你先别急
useEffect是React提供给我们的一个“逃生舱”,是React 的纯函数式世界通往命令式世界的“逃生通道”,选择合适的时机使用useEffect会让我们的代码既优雅又高效,反之会造成不必要的负担。
|
JavaScript
useEffect和useLayoutEffect有什么区别
useEffect和useLayoutEffect有什么区别
|
7月前
|
前端开发 JavaScript
重点来了,useEffect
重点来了,useEffect
|
存储 前端开发 JavaScript
🤮是时候放弃useState了,🚀这么写React更丝滑🚀
🤮是时候放弃useState了,🚀这么写React更丝滑🚀
|
前端开发
【ReactHooks 使用攻略】useState和useReducer的区别
一句话总结:useState用于简单的状态管理和局部状态更新,而useReducer用于复杂的状态逻辑和全局状态管理。
318 0
|
存储 前端开发 JavaScript
面试官:useEffect和useLayoutEffect有什么区别?
源码角度剖析useEffect和useLayoutEffect区别
165 0
面试官:useEffect和useLayoutEffect有什么区别?
|
存储 JavaScript 前端开发
【面试官系列】React 中,如何在页面刷新之后保持状态?看看你知道几种~
【面试官系列】React 中,如何在页面刷新之后保持状态?看看你知道几种~
【面试官系列】React 中,如何在页面刷新之后保持状态?看看你知道几种~

热门文章

最新文章