1 State Hook

35 篇文章 0 订阅
7 篇文章 0 订阅
本文详细介绍了React Hooks在函数组件中的应用,包括避免在循环和嵌套函数中调用Hooks,函数组件与类组件的更新方式差异,强制刷新组件的方法,以及不同更新策略对状态的影响。还探讨了setCount的合并行为以及惰性初始化的特性。
摘要由CSDN通过智能技术生成
  • Hook,使用在函数组件中
  • 不要在循环,条件或嵌套函数中(if、switch、for)调用 Hook
    在这里插入图片描述

1. 函数指向相同的引用

在这里插入图片描述

  • 更新方式:函数组件中state变化时才重新渲染(React使用Object.is比较算法来比较state);
  • 而类组件每次都会更新

2.强制刷新

  • 函数组件
import { useState } from 'react'
window.arr = []
// create react app是基于webpack(模块化打包工具),如果用var声明arr,arr只是在当前文件夹,并不是在全局
// 要想在全局访问arr需要添加到window上
export default function App(props) {
    const [, setCount] = useState({});
    window.arr.push(setCount)
    console.log('全局的arr', window.arr)
    return (
        <>
            <button onClick={() => setCount({})}>click</button>
        </>
    )
}
  • 类组件中,this.setState传任何值都会刷新组件
  • 类组件中可以用this.forceUpdate()强制刷新,不会经过shouldComponentUpdate生命周期
    在这里插入图片描述

3. 函数更新和不同的返回值的更新

import { useState } from 'react'
window.arr = []
// create react app是基于webpack(模块化打包工具),如果用var声明arr,arr只是在当前文件夹,并不是在全局
// 要想在全局访问arr需要添加到window上
export default function App(props) {
    const [count, setCount] = useState(+0);
    window.arr.push(setCount)
    console.log('全局的arr', window.arr)
    const onClick = () => {
        setCount(count + 1)
        console.log('初始状态', count) // 第一次点击:打印0(上一次的值而不是最新的返回值)
        setCount(count + 1) // 因此,即使在这里执行多次,更新后count都为1
    }
    console.log('最新状态', count) // 第一次点击:打印1
    return (
        <>
            <h1>{count}</h1>
            <button onClick={onClick}>click</button>
        </>
    )
}

在这里插入图片描述

import { useState } from 'react'
export default function App(props) {
    const [count, setCount] = useState(+0);
    const onClick = () => {
        setCount(count => count + 1) // 闭包,用最新的count进行更新
        setCount(count => count + 1)
        console.log('初始状态', count) // 第一次点击:打印0(上一次的值而不是最新的返回值)
    }
    console.log('最新状态', count) // 第一次点击:打印2 (点击时递增了2次)
    return (
        <>
            <h1>{count}</h1>
            <button onClick={onClick}>click</button>
        </>
    )
}

在这里插入图片描述

4. setCount是会合并的

  • 多个setCount则执行多次,但最终只render一次
  • 类组件:返回值合并(state的多个属性合并),函数组件中不会合并,直接用setCount的参数更新了
import { useState } from 'react'
export default function App(props) {
    const [count, setCount] = useState({ num1: 1 });
    const onClick = () => {
        setCount({ new: 2 })
    }
    console.log('更新后', count)
    return (
        <>
            <h1>{count.num1}</h1>
            <button onClick={onClick}>click</button>
        </>
    )
}

在这里插入图片描述
在这里插入图片描述

5. 惰性初始化

initialState参数只会在组件的初始渲染中起作用,后续渲染时会被忽略。

const [count, setCount] = useState(() => {
    console.log(1); // 惰性初始化,只会打印一次
    return 1
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值