Redux & Immutable.js - 从 json 设置状态
Posted
技术标签:
【中文标题】Redux & Immutable.js - 从 json 设置状态【英文标题】:Redux & Immutable.js - set state from json 【发布时间】:2016-10-30 00:42:41 【问题描述】:我的减速器
var initialState = Map(
status: true
);
function user(state = initialState, action)
switch (action.type)
case GET_PROFILE:
return state.set(fromJS(action.response))
)
返回json的api -> action.response
"id": 11,
"profileImage": "http://www.surfertoday.com/images/stories/addictivesurfing.jpg"
问题: fromJS
设置了一个新的Map
对象,而不是向现有的Map
添加数据。我试图做类似的事情
return state.set(Array(fromJS(action.response)))
这不起作用。
我该如何解决这个问题?还是我不应该为此使用 Immutable.js?
【问题讨论】:
使用merge
而不是set
【参考方案1】:
好吧,从技术上讲,您确实希望它返回一个新映射,因为 redux/immutable 的重点是您正在返回一个带有更改的新状态对象,而不是改变现有对象。
很难说为什么这对您不起作用,因为我不确定您要做什么。我认为案例“GET_PROFILE”可能会被重命名为更具体的东西?
这个例子并不完美,但可能会给你一些启示:https://github.com/rogic89/ToDo-react-redux-immutable/blob/master/src/reducers/todos.js
如果您发布更多信息或添加更多代码,我可能会提供更多见解。
【讨论】:
【参考方案2】:您可能正在尝试使用从某种请求中检索到的新值来更新状态。
您在 reducer 中编写了未使用新值更新存储的操作。
Immutable.js Map/set 函数需要两个参数 key 和一个你只提供 key 的值。
Immutable.js Map/merge 改为使用合并,并将商店的状态与来自响应的数据结合起来。
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://www.surfertoday.com/images/stories/addictivesurfing.jpg"
【讨论】:
以上是关于Redux & Immutable.js - 从 json 设置状态的主要内容,如果未能解决你的问题,请参考以下文章
Redux 开发工具 Chrome 扩展 Immutable.js 导致错误
在对象中设置值时 Redux 数据不重新呈现(Immutable.js)
是否可以在 React-Redux 应用程序中使用 Immutable.js 来比较 shouldComponentUpdate 中的道具?