鍍金池/ 問(wèn)答/Python  HTML/ react新手有一個(gè)疑惑

react新手有一個(gè)疑惑

react中this.setState到底能不能進(jìn)行運(yùn)算?我按照react 小書(shū)的教程寫但是發(fā)現(xiàn)結(jié)果不對(duì)。。。

我這里的count每次點(diǎn)擊都會(huì)+2,相當(dāng)于是最后一個(gè)this.setState把前面的都覆蓋了。

?

圖片描述

回答
編輯回答
陌南塵

setState是異步的,也就是說(shuō):并不是setState被調(diào)用后state就會(huì)立即改變,它只是保證在之后的某刻會(huì)被改變。因此,你的第2,3個(gè)setState中的this.state.count依舊是undefined。
另外,為了優(yōu)化性能,在一定時(shí)間內(nèi)像這種傳對(duì)象字面量方式調(diào)用setState是會(huì)被批量處理的,前兩個(gè)setState會(huì)被合并到第三個(gè)調(diào)用中,也就是說(shuō)只有第三個(gè)會(huì)起作用。

為了達(dá)到你原來(lái)代碼的意圖,你應(yīng)該使用updater函數(shù)

 this.setState((prevState) => ({ ...prevState, count: 0 }));
 this.setState((prevState) => ({ ...prevState, count: prevState.count + 1 }));
 this.setState((prevState) => ({ ...prevState, count: prevState.count + 1 }));
2017年9月22日 00:18
編輯回答
久不遇

this.setState 是異步的, 需要在回調(diào)函數(shù)里面去取值

ES6

this.setState({
  count: 0
}, () => {
  console.log(this.state.count);
})

ES5

this.setState({
  count: 0
}, function(){
  console.log(this.state.count);
})
2017年10月17日 21:33
編輯回答
病癮

state應(yīng)該寫在constructor里邊啊,你寫在里邊試試?(PS:感覺(jué)這種場(chǎng)景好奇怪啊)

constructor(){
    super();
    this.state ={
        count: true;
    }
}
2017年3月3日 04:09
編輯回答
汐顏

首先是可以計(jì)算的,
其次:
當(dāng)你使用 setState()時(shí) 會(huì)自動(dòng)調(diào)用 render()方法重新渲染組件.
就是說(shuō)在你點(diǎn)擊時(shí) count先變成+1 然后再次變成 +2 .

2018年9月16日 17:00