React:输入 onChange 以更新状态步骤落后

Posted

技术标签:

【中文标题】React:输入 onChange 以更新状态步骤落后【英文标题】:React: Input onChange to update state step behind 【发布时间】:2019-04-05 17:57:26 【问题描述】:

我有一个带有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】:

状态更新是异步的。你想要的是这样的:

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

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

【讨论】:

以上是关于React:输入 onChange 以更新状态步骤落后的主要内容,如果未能解决你的问题,请参考以下文章

React js,如何在输入更改时更新状态对象值? [复制]

我可以在 React js 中使用 useRef 挂钩而不是 onChange 事件来更新状态吗?

在 React 中动态更新“状态”会覆盖整个状态

具有数百个输入的巨大 React 状态数组,状态变化缓慢 onChange

React + Redux - 当输入具有来自状态的值时,输入 onChange 非常慢

反应:onChange 不更新输入字段的值