Redux:数据操作是动作还是减速器的责任?

时间:2017-11-01 08:41:57

标签: redux react-redux

我的动作取一个网址并得到一个json。

我需要将这个json转换为一个对象数组并设置为状态。

我问你:哪里必须放置业务逻辑来将json转换为对象数组?

必须放置

  1. 进入动作代码,使用“即用型”有效负载调度动作,
    1. 进入reducers代码,它在有效负载中接收'原始数据'作为json,然后转换为对象数组并进入状态

2 个答案:

答案 0 :(得分:7)

根据Redux doc

  

操作是将数据从应用程序发送到商店的信息的有效负载。

     

行动描述了事情发生的事实,但没有指明   应用程序状态如何响应变化。这是工作   减速器。

所以我会选择#2选项:将它放入reducer代码中,它将接收原始数据'作为有效载荷中的json,然后转换为一个对象数组并进入状态。

答案 1 :(得分:0)

这是一个古老的问题,但我想分享我的想法。您的情况在redux文档中称为异步操作。而同时:

  

操作是信息的有效负载,这些信息将数据从应用程序发送到商店。

     

动作描述了某些事情发生的事实,但是没有指定应用程序的状态如何响应而改变。这是减速器的工作。

异步操作稍微复杂一些,如高级教程Redux Async Actions下的redux文档所示:

export const RECEIVE_POSTS = 'RECEIVE_POSTS'

function receivePosts(subreddit, json) {
  return {
    type: RECEIVE_POSTS,
    subreddit,
    posts: json.data.children.map(child => child.data),
    receivedAt: Date.now()
  }
}

他们建议您在将异步响应发送到reducer之前先对其进行解析。所以我认为选项1是正确的。

希望这会有所帮助!