当前位置: 首页 > news >正文

React 中 useState 语法详解

 1. 语法定义

const [state, dispatch] = useState(initData)

state:定义的数据源,可视作一个函数组件内部的变量,但只在首次渲染被创造。

dispatch:改变state的函数,推动函数渲染的渲染函数,有非函数和函数两种情况。

initData:state的初始值,有非函数和函数两种情况。

2. 使用案例

1. 变量的定义和修改

import { useState } from 'react'// 定义变量
const [name, setName] = useState('Vue')// 修改变量
const handleUpdate = () => {setName('React')
}

2. 对象的定义和修改

import { useState } from 'react'// 定义对象
const [user, setUser] = useState({ name: '张三', age: 30 })// 修改对象
const handleUser = () => {// setUser({ name: '李四', age: 50 })setUser({ ...user, age: 50 })
}

3. 数组的定义和修改

import { useState } from 'react'// 定义数组
const [list, setList] = useState(['Tom', 'Jack']);// 修改数组
const handleList = () => {setList([...list, 'Lily'])
}

4. 声明时添加逻辑返回

import { useState } from 'react'const num = 1;// 声明通过函数返回
const [name ,setName] = useState(()=>{if(num==1){return "这是单数"}else{return "这是双数"}
})

5. 更新时添加逻辑返回


import { useState } from 'react'// 定义变量
const [count, setCount] = useState(0);// 修改变量
const handleCount = () => {// 通过函数返回setCount((count) => count + 1)}

3. 异步更新

React是异步更新,它会将多次更新合并到一起。

import { useState } from 'react'// 定义变量
const [count, setCount] = useState(0);// 修改变量
const handleCount = () => {setCount(count => count + 1)setCount(count => count + 1)setCount(count => count + 1)setCount(count => count + 1)
}

由于React是异步合并更新,上面调用了4次setCount会统一合并,值会变为4,但只会渲染一次。

如果想要强制刷新渲染,可以使用flushSync函数提高优级,这样就会又渲染一次。

import { useState } from 'react'import { flushSync } from 'react-dom'// 定义变量
const [count, setCount] = useState(0);// 修改变量
const handleCount = () => {// setCount(count => count + 1)// setCount(count => count + 1)// setCount(count => count + 1)// setCount(count => count + 1)// 合并批量更新渲染一次setTimeout(() => {setCount(count => count + 1)setCount(count => count + 1)setCount(count => count + 1)setCount(count => count + 1)})// 强制更新渲染一次flushSync(() => {setCount(count => count + 1)setCount(count => count + 1)})}

http://www.lryc.cn/news/409207.html

相关文章:

  • (面试必看!)一些和多线程相关的面试考点
  • 从零到一使用 Ollama、Dify 和 Docker 构建 Llama 3.1 模型服务
  • 【React】详解 React Router
  • 微软蓝屏”事件暴露了网络安全哪些问题?
  • upload-labs靶场练习
  • java使用hutool工具判断ip或者域名是否可用,java使用ping判断ip或者域名是否可用
  • apache2和httpd web服务器
  • 基于多种机器学习的豆瓣电影评分预测与多维度可视化【可加系统】
  • Linux系统配置STM32的开发环境(代码编辑,编译,下载调试)
  • 每日一题——第三十五题
  • Echarts 柱状图实现同时显示百分比+原始值+汇总值
  • 嵌入式学习Day13---C语言提升
  • Mysql随记
  • wire和reg的区别
  • c语言第四天笔记
  • Hive——UDF函数:高德地图API逆地理编码,实现离线解析经纬度转换省市区(离线地址库,非调用高德API)
  • 深入解析PHP框架:Symfony框架的魅力与优势
  • Go语言实战:基于Go1.19的站点模板爬虫技术解析与应用
  • 5个ArcGIS图源分享
  • 科普文:万字梳理31个Kafka问题
  • Unity UGUI 实战学习笔记(4)
  • Python学习和面试中的常见问题及答案
  • Mysql-索引视图
  • 电子签章-开放签应用
  • Ubuntu下设置文件和文件夹用户组和权限
  • JavaSE从零开始到精通(九) - 双列集合
  • 探索 OpenAI GPT-4o Mini:开发者的高效创新工具
  • 藏文词典查单词,藏汉双语解释,推荐使用《藏语翻译通》App
  • 【机器学习基础】初探机器学习
  • SpringBoot轻松实现多数据源切换