首页 > 解决方案 > Redux reducer 获取字符串而不是对象

问题描述

我正在尝试使用 redux 更新我的状态,但由于某种原因,reducer 只获取一个字符串而不是一个对象。

// action    
const switchTab = (activeTab) => { return { type: SWITCH_TAB, activeTab } }

//reducer
const appUIManagement = (state = initialState, action) => {
switch(action.type) {
    case SWITCH_TAB: 
        return Object.assign({}, state, {activeTab: action.activeTab});
    default:
        return state;
}
}

假设我的初始状态是

{activeTab: 'lines'}

现在,当我发送一个动作时:

{ type:SWITCH_TAB, { activeTab: 'favorites' } },

我的减速器的状态参数只是“行”而不是整个对象,因此我的响应看起来像

{
  activeTab: {
    '0': 'l',
    '1': 'i',
    '2': 'n',
    '3': 'e',
    '4': 's',
    activeTab: 'favorites'
  }
}

我做错了什么或者我对redux没有什么了解?谢谢

标签: javascriptreactjsredux

解决方案


您正在将字符串传递action.activeTabObject.assign

const state = {};
const action = { type: 'SWITCH_TAB', activeTab: 'lines' };
const newState = Object.assign({}, state, action.activeTab);
console.log(newState);

但是,Object.assign期望对象作为其参数,因此您应该传递整个操作,或者更好的是您需要的操作部分:

const state = {};
const action = { type: 'SWITCH_TAB', activeTab: 'lines' };
const newState = Object.assign({}, state, { activeTab: action.activeTab })
console.log(newState);


推荐阅读