在redux库之间建立通信的最佳方式

时间:2017-07-13 01:35:15

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

我们正试图将我们的项目分成几部分:

我们有一些库,例如用户库图片库。 每个库都有自己的reducer,例如:

用户库

{isloggein: false} // store

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

for image-library:

{images: []} // store

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

现在,只要用户登录,我们就会决定 addImages 。问题是图像存储现在没有关于用户操作(这是代码拆分的主要思想)。我们用这样的传奇解决了这个问题:

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

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

2 个答案:

答案 0 :(得分:0)

redux架构的一些优点是易于水合,快照,时间旅行的能力,并且如果存在状态的单个位置,它最有效。

来自redux docs:

  

单一事实来源 - 存储整个应用程序的状态   在单个商店中的对象树中。 Ref

因此,建议您使用redux应用程序的唯一状态。

在你的情况下,我会建议:

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

答案 1 :(得分:0)

我认为这是一种非常有效的方法。你的两个主要选项是要么有一个模块导入动作创建者来自另一个模块(因此有些将两者直接耦合),或者有一段单独的代码将两者粘合在一起。使用这样的传奇是处理“胶水”方面的一种非常好的方法。