React 組件中的state和setState()你知道多少
state的基本使用
狀態(tài)(state)即數(shù)據(jù),是組件內(nèi)部的私有數(shù)據(jù),只能在組件內(nèi)部使用
state的值是對(duì)象,可以通過(guò)this.state來(lái)獲取狀態(tài)。
setState()修改狀態(tài)
狀態(tài)是可變的,可以通過(guò)this.setState({要修改的數(shù)據(jù)})來(lái)改變狀態(tài)
注意:跟vue語(yǔ)法不同,不要直接修改state中的值,這時(shí)錯(cuò)誤的!
//正確
this.setState({
count:this.state.count+1
})
//錯(cuò)誤
this.state.count+=1最后結(jié)合以上內(nèi)容,寫了一個(gè)簡(jiǎn)單的累加器,但是在此之前,我們需要解決this在自定義的方法中的指向問(wèn)題,否則this指向會(huì)為undefined,我們一般希望this指向組件實(shí)例。
解決方法:
1.箭頭函數(shù)
利用箭頭函數(shù)自身不綁定this的特點(diǎn)
class App extends React.Component{
state={
count:0,
}
render(){
// 箭頭函數(shù)中的this指向外部韓靜,此處指向render()方法
return (
<div>
<span>總數(shù):{this.state.count}</span>
<button onClick={()=>{
this.setState({
count:this.state.count+1
})
}}>點(diǎn)擊+1</button>
</div>
)
}
}
ReactDOM.render(<App/>,document.getElementById('root'));但是這種方法會(huì)導(dǎo)致JSX語(yǔ)法中代碼過(guò)于繁雜,不利于表明項(xiàng)目結(jié)構(gòu),一般不推薦使用。
2.Function.prototype.bind()
利用ES5中的bind方法,將事件處理程序中的this與組件示例綁定到一起
class App extends React.Component{
constructor(){
super()//super()必須寫,這時(shí)ES6語(yǔ)法中class的一個(gè)要求
//此時(shí)可將state放到constructor()中
this.state={
count:0,
}
this.add=this.add.bind(this)//將this指向綁定到實(shí)例
}
//事件處理程序
add(){
this.setState({
count:this.state.count+1
})
}
render(){
// 箭頭函數(shù)中的this指向外部韓靜,此處指向render()方法
return (
<div>
<span>總數(shù):{this.state.count}</span>
<button onClick={this.add}>點(diǎn)擊+1</button>
</div>
)
}
}
ReactDOM.render(<App/>,document.getElementById('root'));3.class的示例方法
利用箭頭函數(shù)形式的class實(shí)例方法,此方法比較簡(jiǎn)潔,強(qiáng)烈推薦
注意:該語(yǔ)法是實(shí)驗(yàn)性語(yǔ)法,但是由于腳手架中babel的存在,可以直接使用
class App extends React.Component{
state={
count:0,
}
add=()=>{
this.setState({
count:this.state.count+1
})
}
render(){
// 箭頭函數(shù)中的this指向外部韓靜,此處指向render()方法
return (
<div>
<span>總數(shù):{this.state.count}</span>
<button onClick={this.add}>點(diǎn)擊+1</button>
</div>
)
}
}
ReactDOM.render(<App/>,document.getElementById('root'));總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
React中重新實(shí)現(xiàn)強(qiáng)制實(shí)施表單的流程步驟
這篇文章主要介紹了React中重新實(shí)現(xiàn)強(qiáng)制實(shí)施表單的流程步驟,就像設(shè)計(jì)人員一樣,在添加邏輯之前,您需要為不同的狀態(tài)“模擬”或創(chuàng)建“模擬”,例如,這里只是表單的視覺(jué)部分的模擬,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-05-05
優(yōu)雅的在React項(xiàng)目中使用Redux的方法
這篇文章主要介紹了優(yōu)雅的在React項(xiàng)目中使用Redux的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
React渲染機(jī)制及相關(guān)優(yōu)化方案
這篇文章主要介紹了react中的渲染機(jī)制以及相關(guān)的優(yōu)化方案,內(nèi)容包括react渲染步驟、concurrent機(jī)制以及產(chǎn)生作用的機(jī)會(huì),簡(jiǎn)單模擬實(shí)現(xiàn) concurrent mode,基于作業(yè)調(diào)度優(yōu)先級(jí)的思路進(jìn)行項(xiàng)目?jī)?yōu)化的兩個(gè)hooks,感興趣的小伙伴跟著小編一起來(lái)看看吧2023-07-07
react?+?vite?+?ts項(xiàng)目中優(yōu)雅使用.svg文件
這篇文章主要為大家介紹了react?+?vite?+?ts項(xiàng)目中優(yōu)雅使用.svg文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
React系列useSyncExternalStore學(xué)習(xí)詳解
這篇文章主要為大家介紹了React系列useSyncExternalStore的學(xué)習(xí)及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
React合成事件原理及實(shí)現(xiàn)(React18和React16)
本文主要介紹了React合成事件原理及實(shí)現(xiàn),包含React18和React16兩種版本,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02
react-native ListView下拉刷新上拉加載實(shí)現(xiàn)代碼
本篇文章主要介紹了react-native ListView下拉刷新上拉加載實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

