马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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)
- })
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |