React中useState的理解和使用案例
一、useState的作用
在函數(shù)組件中的
this指向在react中是undefined,使用useState可以使組件state狀態(tài), 并進(jìn)行狀態(tài)數(shù)據(jù)的讀寫操作作用:給函數(shù)組件提供數(shù)據(jù)
語(yǔ)法:
useState()說(shuō)明:const [xxx, setXxx] = React.useState(initValue)setXxx()2種寫法:
- 參數(shù)(initValue): 第一次初始化指定的值在內(nèi)部作緩存
- 返回值([xxx, setXxx]): 包含2個(gè)元素的數(shù)組, 第1個(gè)為內(nèi)部當(dāng)前狀態(tài)值, 第2個(gè)為更新狀態(tài)值的函數(shù)
- setXxx(newValue): 參數(shù)為非函數(shù)值, 直接指定新的狀態(tài)值, 內(nèi)部用其覆蓋原來(lái)的狀態(tài)值
- setXxx(value => newValue): 參數(shù)為函數(shù), 接收原本的狀態(tài)值, 返回新的狀態(tài)值, 內(nèi)部用其覆蓋原來(lái)的狀態(tài)值
二、useState的使用
1. 定義組件變量
// useState給當(dāng)前的組件提供數(shù)據(jù) 相當(dāng)于class組件 this.state={}
import React,{useState} from 'react'
// 一、 定義組件變量
// 參數(shù)一: 定義的變量 參數(shù)二:定義修改變量的方法 useState(0):初始值,相當(dāng)于num=10
const [count, setState] = useState(0)
const [name, setName] = useState('tome')
2. 使用變量{變量名稱}
{/* 二、使用變量{變量名稱} */}
<h2>當(dāng)前求和為:{count}</h2>
<button onClick={add}>點(diǎn)我+1</button> <br />
<h2>我的名字是:{name}</h2>
<button onClick={changeName}>點(diǎn)我改名</button>
3. 函數(shù)修改state數(shù)據(jù) 合并操作,執(zhí)行最后一次
// 三、函數(shù)修改state數(shù)據(jù) 合并操作,執(zhí)行最后一次
function add(){
// setState(count+1) //第一種寫法: 對(duì)值直接操作
setState(count => count+1) //第二種寫法:回調(diào)函數(shù)
}
const changeName = () => {
// 定義變量--定義修改的方法
setName('jack')
}
4. 合并操作 執(zhí)行最后一次
//宏任務(wù) 直接渲染4
setTimeout(()=>{
setState(count+4)
},0)
//微任務(wù) 直接打印 5
Promise.resolve().then(res => {
setState(count + 5)
})
三、案例分析
1. 類組件的方法
import React, { Component } from 'react'
export default class Demo extends Component {
state = { count: 1 }
add = () =>{
this.setState( state => ({count:state.count+1}))
}
render() {
return (
<div>
<h1>當(dāng)前求和為:{this.state.count}</h1>
<button onClick={this.add}>點(diǎn)我+1</button>
</div>
)
}
}

3. 函數(shù)組件的方法
import React, { useState } from 'react'
// useState給當(dāng)前的組件提供數(shù)據(jù) 相當(dāng)于class組件 this.state={}
export default function Demo() {
// 一、 定義組件變量
// 參數(shù)一: 定義的變量 參數(shù)二:定義修改變量的方法 useState(0):初始值,相當(dāng)于num=10
const [count, setState] = useState(0)
const [name, setName] = useState('tome')
// 三、函數(shù)修改state數(shù)據(jù) 合并操作,執(zhí)行最后一次
function add() {
// setState(count+1) //第一種寫法: 對(duì)值直接操作
setState(count => count + 1) //第二種寫法:回調(diào)函數(shù)
// //宏任務(wù) 直接渲染4
// setTimeout(()=>{
// setState(count+4)
// },0)
// //微任務(wù) 直接打印 5
// Promise.resolve().then(res => {
// setState(count + 5)
// })
}
const changeName = () => {
// 定義變量--定義修改的方法
setName('jack')
}
return (
<div>
{/* 二、使用變量{變量名稱} */}
<h2>當(dāng)前求和為:{count}</h2>
<button onClick={add}>點(diǎn)我+1</button> <br />
<h2>我的名字是:{name}</h2>
<button onClick={changeName}>點(diǎn)我改名</button>
</div>
)
}

總結(jié)
到此這篇關(guān)于React中useState理解和使用案例的文章就介紹到這了,更多相關(guān)React useState使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React RenderProps模式運(yùn)用過(guò)程淺析
render props是指一種在 React 組件之間使用一個(gè)值為函數(shù)的 prop 共享代碼的技術(shù)。簡(jiǎn)單來(lái)說(shuō),給一個(gè)組件傳入一個(gè)prop,這個(gè)props是一個(gè)函數(shù),函數(shù)的作用是用來(lái)告訴這個(gè)組件需要渲染什么內(nèi)容,那么這個(gè)prop就成為render prop2023-03-03
詳解React Native開源時(shí)間日期選擇器組件(react-native-datetime)
本篇文章主要介紹了詳解React Native開源時(shí)間日期選擇器組件(react-native-datetime),具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09
ReactJs實(shí)現(xiàn)樹形結(jié)構(gòu)的數(shù)據(jù)顯示的組件的示例
本篇文章主要介紹了ReactJs實(shí)現(xiàn)樹形結(jié)構(gòu)的數(shù)據(jù)顯示的組件的示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-08-08
react實(shí)現(xiàn)頭部導(dǎo)航,選中狀態(tài)底部出現(xiàn)藍(lán)色條塊問(wèn)題
這篇文章主要介紹了react實(shí)現(xiàn)頭部導(dǎo)航,選中狀態(tài)底部出現(xiàn)藍(lán)色條塊問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
react-pdf實(shí)現(xiàn)將pdf文件轉(zhuǎn)為圖片,用于頁(yè)面展示
這篇文章主要介紹了react-pdf實(shí)現(xiàn)將pdf文件轉(zhuǎn)為圖片,用于頁(yè)面展示問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
react中如何使用定義數(shù)據(jù)并監(jiān)聽其值
這篇文章主要介紹了react中如何使用定義數(shù)據(jù)并監(jiān)聽其值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
React不使用requestIdleCallback實(shí)現(xiàn)調(diào)度原理解析
這篇文章主要為大家介紹了React不使用requestIdleCallback實(shí)現(xiàn)調(diào)度原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

