我正在尝试根据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();
}
});
});
}
答案 0 :(得分:1)
使用this.setState
代替变异this.state
不要直接改变this.state,因为之后调用setState()可能 替换你所做的突变。把它当作状态对待 不可变的。
toggleNotifications(val: boolean){
this.setState({notify: val});
mmSetNotification(val).catch(() => this.setState({notify: !val});
}