追加/推入无缝不可变的js - 反应js

时间:2018-01-26 10:22:59

标签: reactjs reducers seamless-immutable

在初始状态的Reducer中,我使用的是无缝不可变的。

export const INITIAL_STATE = Immutable({
  foo:[],

})




function orderReducer(state = initialState, action) {
  console.log('reducer is runnig');

  switch (action.type) {
    case GET_MENU: {

      return state.foo.push("newData") // how to achive this <----
    }

    default:
      return state;
  }
}

如何将新数据推送到foo?

1 个答案:

答案 0 :(得分:0)

如果您想坚持使用ImmutableJS,可以使用new List()方法的pushHere are the docs。有许多具有不同API的数据集始终返回不可变对象。你需要开始学习它们。

但是,如果您正在寻找一种熟悉的方法来处理不变性,我建议您切换到 Immer 。它允许您使用普通的javascript来返回不可变对象,因此您不需要学习任何新的API。看看这里:

https://github.com/mweststrate/immer

我个人总是使用简单的javascript和spread运算符。我发现它舒适,快速,没有任何额外的库。当你习惯语法时非常冗长:

const pushedArr = [...oldArray, newElement]
const mergedObj = {...objA, ...objB}

现在您已了解一些替代方案,找到最适合您和您的团队的方式。