2017-12-05 2 views
1

Ich versuche, meinen Redux-Zustand mit einer PouchDB-Instanz synchronisiert zu bekommen, aber ich habe Probleme damit.Redux-Speicher und PouchDB synchronisieren nicht mit redux-pouchdb

Wie es in den Protokollen scheint, ist weder mein Redux-Status mit PouchDB synchronisiert, nachdem eine Aktion stattgefunden hat, noch ist das PouchDB-Dokument mit dem Redux-Status beim Update synchronisiert.

Ich habe versucht, redux-pouchdb zu implementieren, wie es in jrzerr/react-redux-pouchdb implementiert ist, aber weder bekomme ich einen Fehler, noch funktioniert die Synchronisierung.

Dies ist der Code mit denen ich arbeite:

Reducer (modules/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 
    }) 
    } 
} 

Root-Reduzierer (modules/index.js):

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

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

Speichern (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 

Ich bin dankbar für jede Hilfe.

Antwort

0

In mainbase aktualisieren Sie den Status direkt. Dies funktioniert normalerweise nicht gut. Sie sollten zuerst eine Kopie des aktuellen Status erstellen, die Kopie aktualisieren und die aktualisierte Kopie als neuen Status zurückgeben.

+0

Ich verwende einen Spread-Operator, so dass der Status, den der Reducer zurückgibt, ein neu kopiertes Objekt ist. Der Status wird korrekt aktualisiert, nur die Synchronisierung zum Pochieren funktioniert nicht wie beabsichtigt. – dboth

+0

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

+0

state [aktion.key] = action.value; return {... state} Ich denke, das sollte so sein: newState = {... state, [action.key]: action.value}; return newState – Amitabh

Verwandte Themen