说我有两个组件,App和DialogBox;
所以我的React Store也有两个对象
const rootReducer = combineReducers({
app: appReducer,
dialog: dialogReducer
});
export const store = createStore(rootReducer);
现在,当我必须打开对话框时,我叫dialogBoxActions.openDialog()
而且,当我关闭对话框时,我呼叫dialogBoxActions.closeDialog()
,也呼叫appActions.notifyDialogClosed()
;
这有效,但是有没有一种更清晰的方法?
例如,我可以在App商店中使用state.dialog吗?这就是我在应用程序中尝试过的
const mapStateToProps = (state) => {
return {
checkCloseDialog: state.dialog.openDialog
}
}
ComponentWillReceiveProps
确实获得了checkCloseDialog对象,但它获得了旧状态。我调试发现它在DialogBox组件的reducer功能之后被正确触发,但是我得到了旧数据。
是否存在任何一种优雅的方式来访问彼此的商店,或者Redux的哲学是组件应该通过动作彼此通信?
答案 0 :(得分:0)
啊!好吧,我不好。
是的,有可能。而且有效。我的错误是我试图在ComponentWillReceiveProps()
方法中使用它。事实是,似乎redux存储稍后会更新。因此,ComponentWillReceiveProps()
将保持旧状态。
因此,render()
和ComponentDidUpdate()
方法将获得更新状态。
此处的目的是帮助减少独立组件之间的多个操作调用。
例如,对话框不应该涉及调用者在关闭自身后应该做什么。相反,调用者应订阅Dialog的状态来决定要做什么。
希望这对其他人有帮助。