如何在React组件setState的最终回调中获取最终提交状态?
并发状态变更后的最终状态获取问题
我遇到了并发场景,应用状态会响应多个并发发生的事件而变更,因此传统的setState(state)无法生效,必须使用操作未提交状态的setState(state => { return {...state, extra } })(这意味着在用于下一次重渲染前,其他事件可对其进行修改)。但同时我需要在状态提交后(所有并发变更都已应用)通过Promise返回结果,于是编写了如下代码:
function applyChangesToState(param1, param2) { return new Promise(resolve => { this.setState(state => { // some compuations here const extra = calculateSomeExtra(state, param1, param2); return {...state, extra }; }, () => { // HOW CAN I ACCESS THE COMMITED (MOST RECENT AND FINAL) STATE HERE? const { extra } = state; // <-- WHERE SHOULD I READ THE COMMITTED STATE FROM? // SO I CAN PUT IT IN RESOLVE: resolve(extra); // IF I READ FROM this.state HERE IS IT CERTAIN THAT // ALL CONCURRENT CHANGES HAVE BEEN APPLIED ALREADY PRIOR TO // THE NEXT RE-RENDER? }); }); }
核心问题:通过发起状态变更,如何在回调中获取重渲染前的最终状态?
更新:答案是:在最终回调中使用this.state!
内容的提问来源于stack exchange,提问作者Trident D'Gao
相关产品推荐
相关产品推荐

