【问题标题】:React: how to force state changes to take place after setStateReact:如何在 setState 之后强制进行状态更改
【发布时间】:2016-11-09 18:59:02
【问题描述】:

如何在调用 setState 后强制在 React 中进行状态更新?

据我所知,下次调用渲染时状态会有效更新。另外,forceUpdate() 应该重新渲染组件并立即更新状态更改,对吗?然而,情况似乎并非如此。这是一个例子。

handleSomeEvent(data) {
    this.setState({
        data: data
    })
    this.forceUpdate()

    // At this point state should be updated but it isn't
    this.props.consumeData(this.state.data) // consumeData will receive old data
}

如何确保在调用 consumeData 之前实际更新状态?

【问题讨论】:

    标签: javascript html css design-patterns reactjs


    【解决方案1】:

    setState() 是异步的,所以可以在回调中做:

    handleSomeEvent(data) {
      this.setState({
        data: data
      }, () => this.props.consumeData(this.state.data)); // using `data` would work as well...
    }
    

    【讨论】:

    • 这是否被认为是安全的、良好的做法,还是可能会导致看不见的副作用?
    • 这是安全的,AFAIK。但这可能不是最佳实践,因为建议使用应用级别状态(使用 redux)。因此,您可能可以避免将 consumeData 作为来自父级的道具传递。
    • 如果通过子组件的 props 函数调用 setState 怎么办?如何在子组件中执行下一行之前强制执行 setState?
    • 如果有人想知道回调函数的参数,有this SO answer
    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2021-06-08
    • 2021-05-03
    • 2019-03-08
    • 2019-04-05
    • 1970-01-01
    • 2018-04-07
    相关资源
    最近更新 更多