【问题标题】:Redux store and PouchDB not syncing with redux-pouchdbRedux 存储和 PouchDB 不与 redux-pouchdb 同步
【发布时间】:2017-12-05 22:25:51
【问题描述】:

我正在尝试将我的 redux 状态同步到 PouchDB 实例,但遇到了问题。

正如日志中显示的那样,我的 redux 状态在操作发生后也没有同步到 PouchDB,PouchDB 文档也没有在更新时同步到 redux 状态。

我尝试实现redux-pouchdb,因为它在jrzerr/react-redux-pouchdb 中实现,但我没有收到错误,同步也没有工作。

这是我正在使用的代码:

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
    })
  }
}

根减速器(modules/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

感谢您的帮助。

【问题讨论】:

    标签: javascript reactjs redux react-redux pouchdb


    【解决方案1】:

    在 mainbase 中,您直接更新状态。这通常不能很好地工作。您应该首先创建当前状态的副本,更新副本并将更新后的副本作为新状态返回。

    【讨论】:

    • 我正在使用扩展运算符,因此减速器返回的状态是一个新复制的对象。状态正在正确更新,只是与偷猎的同步没有按预期工作。
    • 状态[action.key] = action.value;返回{...状态}
    • 状态[action.key] = action.value; return {...state} 我认为上面应该是: let newState = { ...state, [action.key]: action.value };返回新状态
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2020-11-19
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多