在现有状态转换期间无法更新

时间:2016-08-02 07:15:03

标签: javascript reactjs react-native

我正在尝试根据promise方法的结果设置状态值。对于乐观更新,我在异步操作之前设置状态值。如果操作失败,则重置状态

componentWillMount(){
    this.setState({notify: this.props.notif});
}

render(){
    return(
        <Switch
          onValueChange={(val) => this.toggleNotifications(val)}
          disabled={! this.props.connected}
          value={this.state.notify}
        />
    )
}

toggleNotifications(val: boolean){
    this.setState({notify: val});
    mmSetNotification(val).catch(() => this.setState({notify: !val}));
}

我使用异步方法使用网络调用来设置通知值,这将更新用户对象

async function mmSetNotification(checked: boolean) : Promise {
    return new Promise((resolve, reject) => {
        Meteor.call('setNotification', checked, (error, result) => {
           if(error){
               reject(error);
           }else{
               resolve();
           }
        });
    });
}

1 个答案:

答案 0 :(得分:1)

使用this.setState代替变异this.state

DOCS:

  

不要直接改变this.state,因为之后调用setState()可能   替换你所做的突变。把它当作状态对待   不可变的。

toggleNotifications(val: boolean){
  this.setState({notify: val});
  mmSetNotification(val).catch(() => this.setState({notify: !val});
}