2017-12-05 34 views
1

내 redux 상태를 PouchDB 인스턴스에 동기화하려고하는데 문제가 있습니다.Redux 저장소와 PouchDB가 redux-pouchdb와 동기화되지 않습니다.

로그에서 보이는 것처럼 동작이 발생하면 PouchDB에 내 redux 상태가 동기화되지 않으며 업데이트시 PouchDB 문서가 redux 상태로 동기화되지 않습니다.

에 구현 된대로 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