使用给定数组反应redux merge状态

时间:2016-01-29 10:38:59

标签: javascript reactjs redux

假设我有一个减速器,就像:

const initialState = [
  {
    accessToken: null,
    isLoggedIn: false,
  }
]

export default function my_reducer(state = initialState, action) {
  switch (action.type) {
    case LOGIN:
        return state.merge(user: action) ---> how to handle this 

输出应该是:

[
      {
        accessToken: null,
        isLoggedIn: false,
        user: {
            name: 'some name',
            email: 'some email'
      }
    ]

在行动中,我正在通过JSON.stringify(response)

获取我提供的数组

以前的数据不应更改,新数据应该更新

5 个答案:

答案 0 :(得分:3)

ES6 Way

要使用ES6中的状态创建新对象,我们可以使用spread运算符。喜欢这个

...
case ActionType.SUCCESS_GET_DATA : {
    let newState = { ...state, [action.uniqueKey]: action.payload };
    return state.merge(newState);
}
...

我将uniqueKey部分作为变量,因为您需要一个唯一的州名称。

IMO这种语法比Object.assign

更容易理解

答案 1 :(得分:2)

答案 2 :(得分:1)

首先我看到你的状态实际上是一个数组,但我认为你需要一个对象吗?

所以它会是:

return {
    ...initialState,
  user: {
    name: '...',
    surname: '...'
  }
};

(需要Babel)所以使用spread运算符你可以:

return Object.assign({}, initialState, {
    user: {
    name: '...',
    surname: '...'
  }
});

或者,如果你没有通过Babel进行转换:

"download=0"

答案 3 :(得分:0)

使用ES6传播语法

...
case 'ACTION_TYPE_A': {
return { ...state, action.key: action.value };
}
...

如果'key'存在于原始状态,则会通过更新'key'来返回合并状态。

答案 4 :(得分:0)

Everything according to new Es6 format : )

总共addToDo reducer函数,其中将数据附加到以前的状态。然后您将获得新状态数据的输出:)

export const addToDo = (state, action) => {
const { name, email, phone, image,key } = action;
  var data = [...state.data];
  var newData = {
     name: name, email: email, phone: phone, image: image,key:key 
  }
   data.push(newData)

return(
state.merge({
  data : data
})

)};

快乐的编码。