我有一个具有onChange
属性的输入,该输入调用一个函数handleChange
,该函数将使用在输入中键入的新值来更新状态。
问题1 -在handleChange
的末尾记录状态时,它包含旧状态,或后面包含一个输入字母(当键入“ cat”时将记录为“ ca”) 。
问题2 -如果没有event.persist
,则该事件为“合成”事件,并且不包含该值。保留persist
是否可以接受?还是应该采用不同的结构?
输入具有:
onChange={this.handleChange}
哪个调用函数:
handleChange = (event) => {
event.persist() // without this the event is 'synthetic'
const newTerms = {...this.state.terms}
newTerms.text = event.target.value
this.setState({terms: newTerms})
console.log('state', this.state) //logs the previous state
}
this.state.terms.text
应该更改:
this.state = {
terms: {
text: '',
答案 0 :(得分:2)
状态更新是异步的。您想要的是什么
this.setState({terms: newTerms}, () => console.log('state', this.state))
即使没有persist
,事件也包含事件处理程序内部的值。这仅在同步上下文中适用,因此您不应将事件传递给setState
或其他异步方法。