亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ReactJS中this.state和this.setstate的區別是什么?

ReactJS中this.state和this.setstate的區別是什么?

梵蒂岡之花 2019-08-28 08:57:35
ReactJS中this.state和this.setstate的區別是什么?我想更改hasSubmit密鑰的值,就像在第一個代碼部分中一樣。我知道這不推薦。但第二個代碼是異步的,我不想使用的回調函數setState。是什么的差異this.state和setState?有沒有辦法hasSubmit立即改變國家價值?第一個代碼:this.state.hasSubmit = falsethis.setState({})//Code that will use `hasSubmit`.第二個代碼:this.setState({    hasSubmit: false,});//Code that will use `hasSubmit`.加:場景是:hasSubmit設置false在getInitialState()。hasSubmitfalse當我點擊submit按鈕時會改變。hasSubmit將true在提交時更改為。第一次單擊submit沒有問題,hasSubmit將被設置為true。但是第二次點擊submit將使用錯誤Second asynchronous code,因為hasSubmit它仍然是true,而First Code可以解決問題。
查看完整描述

3 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

以下是React文檔所說的內容:

永遠不要this.state直接變異,因為之后調用setState()可能會替換你所做的變異。把this.state看作是不可變的。

setState()不會立即改變this.state但會創建一個掛起狀態轉換。this.state調用此方法后訪問可能會返回現有值。

無法保證對setState的調用進行同步操作,并且可以對調用進行批處理以提高性能。 setState()除非實現條件渲染邏輯,否則將始終觸發重新渲染shouldComponentUpdate()

如果正在使用可變對象并且無法實現邏輯shouldComponentUpdate(),則setState()僅在新狀態與先前狀態不同時調用將避免不必要的重新呈現。

以設計方式使用API總是明智的。如果文檔說不改變你的狀態,那么你最好不要改變你的狀態。

雖然setState()技術上可能是異步的,但它肯定不會以任何明顯的方式變慢。組件的render()功能將以非常短的順序調用。

直接設置狀態的一個缺點是陣營的生命周期方法- ,,shouldComponentUpdate() -依賴于狀態轉換被調用。如果直接更改狀態并使用空對象調用,則無法再實現這些方法。componentWillUpdate()componentDidUpdate()setState()setState()

另一個是它只是糟糕的編程風格。你在兩個陳述中做了你可以做的一個。

而且,這里沒有實際的好處。在這兩種情況下,render()直到調用setState()(或forceUpdate())之后才會觸發。

您聲稱有必要這樣做而不實際解釋需要的是什么。也許你想更詳細地解決你的問題??赡苡懈玫慕鉀Q方案。

最好使用框架而不是框架。

UPDATE

從下面的評論:

需要的是我想在下面使用改變的hasSubmit。

好的我現在明白了。如果您需要立即使用未來的州財產,最好的辦法就是將其存儲在本地變量中。

const hasSubmit = false;this.setState({
  hasSubmit: hasSubmit});if (hasSubmit) { 
  // Code that will use `hasSubmit` ...


查看完整回答
反對 回復 2019-08-28
?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

如果要更改狀態并通過響應觸發重新渲染: 使用第二個代碼。

  this.setState({
    hasSubmit: false,
  });

第一個代碼的問題/錯誤:

  this.state.hasSubmit = false      // Updates state directly: 
                                    // You are not supposed to do this
                                    // except in ES6 constructors
  this.setState({})                 // passes an empty state to react.
                                    // Triggers re-render without mutating state


查看完整回答
反對 回復 2019-08-28
  • 3 回答
  • 0 關注
  • 2808 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號