在Electron + React中创建由MongoDB支持的持久redux状态

时间:2016-05-09 16:00:29

标签: javascript reactjs redux electron react-redux

我有一个基于react-electron-boilerplate的应用程序,使用相同的模式集。我的应用程序使用select * from friendlist where userid = '100000006' or frienduserid='100000006' and frndstatuid='4' 作为持久层,连接到远程数据库以维持其状态。

要获取当前状态,我通常在我的一个动作控制器(mongodb)中执行以下操作

app/actions/<whatever>.js

但是,这不一定写入数据库。我想要的是维护一个持久性状态,也就是说,只要它改变就把这个状态写入数据库(是的,我知道这可能对大型应用程序来说代价很高)。

使用redux和mongodb可以实现吗?

2 个答案:

答案 0 :(得分:3)

虽然我从Ian提到的finalReducer模式开始,但事实证明使用Redux中间件要容易得多:

import {createStore, combineReducers, applyMiddleware} from 'redux'

const persist = store => next => action => {
  next(action)
  persistData(store.getState())
}

const store = createStore(<reducer>, undefined, applyMiddleware(persist))

答案 1 :(得分:2)

绝对可以实现。在创建商店之前,我会将所有减速器组合成最终减速器。最终的缩减器将对任何动作起作用,并将状态保存到Mongo。一些伪代码作为例子:

import { createStore, combineReducers } from 'redux';
import <all of your other reducers>

const reducers = combineReducers({
    <other reducers here>
});

const finalReducer = (state, action) => {
    const nextState = reducers(state, action);

    //use whatever module you use to write to mongo...
    persistToMongo(nextState);

    return nextState;
};

const store = createStore(finalReducer, undefined);

希望这足以让你的创意充满活力。如果您需要更多帮助或清晰度,请告诉我,否则,祝您好运!