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 中的道具?

传播运算符与 immutable.js

TypeScript 的 `readonly` 可以完全替代 Immutable.js 吗?

React Redux:在 Reduce 状态下使用不可变