【问题标题】:Best way to build communication between redux libraries在 redux 库之间建立通信的最佳方式
【发布时间】:2017-12-17 14:41:59
【问题描述】:

我们正在尝试将我们的项目拆分为多个部分:

我们有库,例如 user-libraryimage-library。 每个库都有自己的 reducer 和 action,例如:

对于用户库:

{isloggein: false} // store

function logIn() { //action creator 
    return {
        type: 'LOGIN'
    };
}

图片库:

{images: []} // store

function addImages() { //action creator 
    return {
        type: 'ADDIMAGES'
    };
}

现在我们决定在用户​​登录后立即addImages。问题是图像存储现在与用户操作无关(这是代码拆分的主要思想)。我们通过使用这样的 sagas 解决了这个问题:

function* addImagesWhenLogIn() {
    while (true) {
        yield take('LOGIN');
        yield put(addImages());
    }
}

但它不是不透明的(我们调度了一个动作,但实际上会调度 2 个动作)。虽然在 sagas 中有应用程序的业务逻辑很好,但我认为 take -> put 序列不是这种情况下的最佳解决方案,我正在寻找更好的方法。

【问题讨论】:

    标签: javascript reactjs redux react-redux redux-saga


    【解决方案1】:

    redux 架构的一些优点是能够轻松进行水合、快照、时间旅行,并且如果有一个存储状态的地方,它的效果最好。

    来自 redux 文档:

    单一数据源 - 存储整个应用程序的状态 在单个存储中的对象树中。 Ref.

    因此,建议为您的 redux 应用设置一个独特的状态。

    在你的情况下,我建议:

    • 您可以将库/模块分开,在您的应用中根据需要导入它们。
    • 按照 redux 文档中的建议,仅使用单个状态树。
    • 使用containers 为您的代表性组件提供状态信息。

    【讨论】:

      【解决方案2】:

      我认为这是一种完全有效的方法。您的两个主要选择是让一个模块从另一个模块导入操作创建者(因此在某种程度上直接耦合两者),或者有一个单独的代码将两者粘合在一起。使用这样的 saga 是处理“胶水”方面的一种非常好的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-20
        • 1970-01-01
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        • 2015-08-10
        • 1970-01-01
        • 2013-09-09
        相关资源
        最近更新 更多