Redux如何在其他action内部使用mapStateToProps关联的状态调整逻辑
Redux跨action状态读取实现方案
完全可以实现,你当前使用的是Redux Thunk模式的异步action,函数内置的getState参数支持直接读取全局store的所有状态,不需要额外做跨文件参数传递。
具体修改逻辑
你只需要在notifyKickedOut的thunk函数内部,先通过getState获取features/toolbox分支下的changeNotification状态,再替换原有的通知调度逻辑即可,取值路径和你Toolbar.js中mapStateToProps的路径保持一致就行。
修改后的完整代码
export function notifyKickedOut(participant: Object, _: ?Function) { // eslint-disable-line no-unused-vars return (dispatch: Dispatch<any>, getState: Function) => { // 新增:从store中获取changeNotification状态 const changeNotification = Boolean(getState()['features/toolbox'].changeNotification); const args = { participantDisplayName: getParticipantDisplayName(getState, participant.getId()) }; // 替换为分支判断逻辑 if(changeNotification){ dispatch(showNotification({ appearance: NOTIFICATION_TYPE.ERROR, descriptionKey: 'dialog.changed', titleKey: 'dialog.changed' })); }else{ dispatch(showNotification({ appearance: NOTIFICATION_TYPE.ERROR, hideErrorSupportLink: true, descriptionKey: 'dialog.kickMessage', descriptionArguments: args, titleKey: 'dialog.kickTitle', titleArguments: args })); } // 原有挂断逻辑保持不变 setTimeout( () => { window.APP.conference.hangup(false); executeCommand('hangup'); window.close(); }, NOTIFICATION_TIMEOUT); }; }
注意事项
- 确保业务流程上
setChangeNotification(true)的调度时机早于notifyKickedOut的触发时机,这样getState读取到的就是最新的状态值。 - 你之前在
Toolbar.js的endMeetingForAll方法中,dispatch之后立刻打印_changeNotification得到旧值是正常现象:React组件的props更新需要等待下一次重渲染,但是store的状态在dispatch执行后就已经同步更新了,在其他thunk action中通过getState可以直接拿到最新值,不需要担心同步问题。
内容的提问来源于stack exchange,提问作者shanks_9790
相关产品推荐
相关产品推荐

