【问题标题】:Redux store overwritten instead of mergedRedux 存储被覆盖而不是合并
【发布时间】:2018-04-21 12:52:34
【问题描述】:

我正在使用 Redux 在 React Native 中编写一个应用程序。当我执行一个操作时,它似乎取代了 store,而不是更新 store,只定义了 reducer 中明确声明的值。

我正在使用来自redux-actions 包的handleActions。一个减速器示例如下所示;

import { handleActions } from 'redux-actions';

export default handleActions({
  DOCUMENT_GET_ALL_PENDING: state => ({
    isRefreshing: true,
  }),
  DOCUMENT_GET_ALL_FULFILLED: (state, action) => ({
    document: action.payload.documents,
    isRefreshing: false,
  }),
}, { isRefreshing: false, documents: [] });

例如,当它到达DOCUMENT_GET_ALL_PENDING 时,文档数组被设置为未定义。 这是我的商店创建的样子; 我正在使用redux-promise-middlewareredux-devtools-extensionthunk 中间件。

const store = createStore(
  rootReducer,
  defaultState,
  composeWithDevTools(applyMiddleware(promiseMiddleware(), thunk)),
);

欢迎任何和所有的帮助或建议。

【问题讨论】:

    标签: react-native redux react-redux redux-thunk


    【解决方案1】:

    您需要将您的状态与前一个状态合并。现在您只是返回新的状态值

    有很多方法可以做到,但您可以使用es6 spread operator

    DOCUMENT_GET_ALL_PENDING: state => ({
        ...state,
        isRefreshing: true,
      }),
    
    
    
    DOCUMENT_GET_ALL_FULFILLED: (state, action) => ({
        ...state,
        document: action.payload.documents,
        isRefreshing: false,
      })
    

    【讨论】:

    • 有没有办法覆盖这个默认行为?我可能不得不寻找combineReducers的另一个实现?
    • 你需要返回一个新的合并状态,因为它是 immutable 并且不能被变异,有一些辅助函数可以做到这一点,如 Immutable.js 可能有帮助
    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 2020-04-21
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多