首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >状态setState后评价

状态setState后评价
EN

Stack Overflow用户
提问于 2020-05-14 14:15:06
回答 4查看 54关注 0票数 1

在react组件中,我以各种方式更新state,但我希望在状态更新后进行评估(调用函数)。

当我执行以下操作时,secondUpdate()无法访问更新的state,因此它晚了一个周期:

代码语言:javascript
复制
firstUpdate = e => {
    this.setState({ email: e.state.value });
    // ... some validation
    secondUpdate();
}
secondUpdate() {
    const allValid= this.state.aIsValid & this.state.bIsValid & this.state.cIsValid;
    this.setState({ allIsValid: allValid });
}

如何将secondUpdate()绑定到任何或某些state更新?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-05-14 14:16:52

您可以使用setState callback

代码语言:javascript
复制
this.setState({ email: e.state.value } , () => {
   // Will get called once the state is updated
   // ... some valdidations
   secondUpdate();
});
票数 2
EN

Stack Overflow用户

发布于 2020-05-14 14:21:48

allIsValid根本不应该是一个国家。如果有相互依赖的状态,则可能会导致状态不同步,从而导致逻辑中断。相反,由于allIsValid是从其他状态派生的,因此可以根据呈现内的状态计算它:

代码语言:javascript
复制
 render() {
   const { email } = this.state;
   const allIsValid = email.length > 5 && /*...*/;
    // ...
 }
票数 2
EN

Stack Overflow用户

发布于 2020-05-14 14:20:54

您可能想看看这个:https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous

因为this.props和this.state可能是异步更新的,所以不应该依赖它们的值来计算下一个状态。 要修复它,请使用接受函数而不是对象的第二种形式的setState()。该函数将接收前一个状态作为第一个参数,在应用更新时支持作为第二个参数:

代码语言:javascript
复制
this.setState({
    // change the state
}, () => {
 //Perform something after the state is updated.
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61799594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档