【问题标题】:Redux and immutablesRedux 和不可变
【发布时间】:2016-02-21 23:59:13
【问题描述】:

我正在尝试在 reducer 函数中添加不可变。但是,当来自 firebase 的数据命中时,我收到 Uncaught TypeError: currentState.merge is not a function 错误。

Reducer 代码如下(注释代码不可变)

import C from '../../constants';
import initialState from '../initialState';
import {Map, List, fromJS} from 'immutable';

const membersInitialState = fromJS(initialState.members);

export default (currentState = membersInitialState, action) => {
  let newstate;
  switch (action.type) {
    case C.RECEIVE_MEMBER_DATA:
    /*return Object.assign({}, currentState, {
      hasReceivedData: true,
      data: action.data
    });*/
    return currentState.merge({
      hasReceivedData: true,
      data: action.data
    });
    //default: return currentState || initialState.members;
  }
  return currentState;
}

rootReducer 如下

import membersReducer from './members';

function rootReducer (state, action){
    return {
        members: membersReducer(state.members, action)
    }
};

export default rootReducer;

【问题讨论】:

  • 那么currentState里面是什么?
  • @zerkms 只是初始状态内容
  • 是您认为的还是实际存在的?我相信是前者,因为 JS 不同意你的观点(因为不清楚为什么它应该在你明确传递一个值时就在那里)
  • 更新了截图。这是我能看到的..
  • 这不是你所看到的:如果只有arguments.length <= 0 || arguments[0] === undefined,初始状态就会存在。只需再次检查您的屏幕截图。所以currentState 变量包含一个您明确传递的 JS 对象(不是 immutablejs 对象)。

标签: reactjs redux immutable.js


【解决方案1】:

问题是因为 store 创建时没有使用不可变对象。

export default createStoreWithMiddleware(rootReducer, fromJS(initialState));

如上更新后,现在可以使用了。

【讨论】:

    猜你喜欢
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多