2017-12-05 27 views
1

私のredux状態をPouchDBインスタンスに同期しようとしていますが、問題があります。ReduxストアとPouchDBがredux-pouchdbと同期していません

ログに記録されているように、アクションが発生した後に私の還元状態がPouchDBに同期されることも、更新時にPouchDB文書が還元状態に同期されることもありません。

redux-pouchdbを実装しましたが、jrzerr/react-redux-pouchdbに実装されていますが、どちらもエラーが発生せず、同期も機能しません。

これは、私が働いているコードです:

リデューサー(モジュール/ mainbase.js):

import { persistentReducer } from 'redux-pouchdb'; 
export const INPUT_CHANGED = 'mainbase/INPUT_CHANGED' 

const initialState = {} 

function mainbase (state = initialState, action) { 
    switch (action.type) { 
     case INPUT_CHANGED: 
      state[action.key] = action.value; 
      return {...state} 
     default: 
      return state; 
    } 
} 

export default persistentReducer(mainbase); 

export const inputChanged = (key, value) => { 
    return dispatch => { 
    dispatch({ 
     type: INPUT_CHANGED, 
     key: key, 
     value: value 
    }) 
    } 
} 

ルート減速(モジュール/ index.js):

import { combineReducers } from 'redux' 
import { routerReducer } from 'react-router-redux' 
import mainbase from './mainbase' 

export default combineReducers({ 
    router: routerReducer, 
    mainbase 
}) 

ストア(store.js):

import { createStore, applyMiddleware, compose } from 'redux' 
import { routerMiddleware } from 'react-router-redux' 
import thunk from 'redux-thunk' 
import createHistory from 'history/createBrowserHistory' 
import rootReducer from './modules' 
import { persistentStore } from 'redux-pouchdb' 
import PouchDB from 'pouchdb' 

export const history = createHistory() 

const db = new PouchDB('testproject') 

const initialState = {} 

const enhancers = [ 
    persistentStore(db) 
] 

const middleware = [ 
    thunk, 
    routerMiddleware(history) 
] 

const composedEnhancers = compose(
    applyMiddleware(...middleware), 
    ...enhancers 
) 

const store = createStore(
    rootReducer, 
    initialState, 
    composedEnhancers 
) 

export default store 

私は何か助けに感謝します。

答えて

0

メイン州では、州を直接更新しています。これは通常うまくいきません。 最初に現在の状態のコピーを作成し、コピーを更新し、更新されたコピーを新しい状態として返します。

+0

私はスプレッド演算子を使用していますので、リデューサが返す状態は新しくコピーされたオブジェクトです。状態が正しく更新されています。ちょうどpoachへの同期が意図したとおりに機能していません。 – dboth

+0

状態[action.key] = action.value; return {... state} – Amitabh

+0

状態[action.key] = action.value; return {... state} 私は上記のようになるはずです: let newState = {... state、[action.key]:action.value}; return newState – Amitabh

関連する問題