考慮一個編輯框。用戶鍵入一些文本。上附着有按鍵處理程序,它確實是這樣的:反應事件處理
setState({echo: this.state.echo + event.char})
是否有可能在初始狀態{echo: 「」}
,用戶鍵入「A」,然後「B」,陣營電話onKeyPress(「a」)
,這就要求setState({echo: 「a」})
,和那麼 - setState之前實際上是由React - React calls onKeyPress(「b」)
應用?
你看到一個問題,對吧? OnKeyPress(「b」)
會看到同樣的老狀態{echo: 「」}
爲OnKeyPress(「a」)
做,並會發出setState({echo: 「」+「b」})
,這是setState({echo: 「b」})
- 而我們顯然是想{echo: 「ab」}
- 我的測試表明我的第二個事件處理程序不會被調用之前,首先
setStat
e是完全處理。但是一些測試可能存在,不像一些記錄在案的合同。 - 我意識到這個問題有解決方案,就像使用表格
setState(state => …)
- 但我仍想知道:這種情況是否可能。也許合成事件處理程序只能在所有待處理的
setState
處理(由前一個處理程序引起)完成時才被執行?如果是這樣,我可以在哪裏閱讀一些證明?某些手冊中的特定位置或Web上發佈的合格答案...或者,也可能是相反的 - 這種保證不存在(但是,如果情況如此,setState的「簡單」形式肯定會導致錯誤並且他們不應該允許這種形式)。
你是否看到'setState'也接受一個具有前一狀態的函數? –
「我意識到這個問題有解決方案,就像使用表單setState(state => ...)」 –