反应:输入onChange来更新状态

时间:2018-11-01 13:39:52

标签: reactjs input state onchange

我有一个具有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: '',

1 个答案:

答案 0 :(得分:2)

状态更新是异步的。您想要的是什么

this.setState({terms: newTerms}, () => console.log('state', this.state))

即使没有persist,事件也包含事件处理程序内部的值。这仅在同步上下文中适用,因此您不应将事件传递给setState或其他异步方法。