繁体   English   中英

如何通过 Redux 商店访问另一个组件的 state

[英]How do I access the state of another component via Redux store

假设我有两个组件,App 和 DialogBox;

所以我的反应商店也有两个对象

const rootReducer = combineReducers({
    app: appReducer,
    dialog: dialogReducer
});

export const store = createStore(rootReducer);

现在,当我必须打开对话框时,我调用dialogBoxActions.openDialog()并且,当我关闭对话框时,我调用dialogBoxActions.closeDialog()appActions.notifyDialogClosed()

这行得通,但是有没有办法以更清晰的方式做到这一点?

例如,我可以使用应用商店中的 state.dialog 吗? 这是我在应用程序中尝试过的

const mapStateToProps = (state) => {
    return {
        checkCloseDialog: state.dialog.openDialog
    }
}

ComponentWillReceiveProps确实获得了 checkCloseDialog object,但它获得了旧的 state。 我调试发现它在 DialogBox 组件的减速器 function 之后被正确触发,但我得到了旧数据。

是否有任何优雅的方式来访问彼此的商店,或者 Redux 的理念是组件应该通过操作相互通信?

啊好吧。 我的错。

对的,这是可能的。 它有效。 我的错误是我试图在ComponentWillReceiveProps()方法中使用它。 问题是,redux 商店似乎稍后会更新。 因此, ComponentWillReceiveProps()将保存旧的 state。

因此, render()ComponentDidUpdate()方法获取更新的 state。

这里的目的是帮助减少独立组件之间的多个操作调用。

例如,Dialog 不应该关心调用者在它自己关闭后应该做什么。 相反,调用者应该订阅 Dialog 的 state 来决定要做什么。

希望这对其他人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM