【发布时间】:2016-02-25 11:18:58
【问题描述】:
在异步操作创建器中,我从服务器获取数据。对于我的用例,数据的格式不是很好,我需要对其进行转换以在 UI 中使用它。
问题:我应该
-
在数据到达之前转换数据,然后用转换后的数据发送成功操作?
fetch("some/url") .then(res => dispatch(successActionCreator(transform(res))) 使用原始数据发送成功操作并将其存储为,并在
mapStateToProps中进行转换?使用原始数据发送成功操作并在 reducer 中进行转换?
在1.中,数据会在我需要的时候进行转换,在我看来它解耦了API数据格式和我的Redux store。但转换逻辑在数据获取动作中。
在 2. 中,异步操作创建者保持简单,完全没有逻辑,映射发生在 UI 层。但这意味着我需要通过重新选择之类的方法对其进行优化,因为每次渲染都会调用mapStateToProps。
在 3. 中,异步操作创建者保持简单,完全没有逻辑,但操作与 API 数据格式耦合。
我会选择 1.(无论如何都要对转换进行单元测试),但我并不完全满意。有什么建议吗?谢谢!
-- 编辑:由于这个问题有一个固执的答案,所以我在这里回答我自己。我会选择 1.,出于 cmets 中所述的所有原因和答案之一。
【问题讨论】:
-
这取决于一个固执己见的答案 :) 但我也会选择 1。选项 2 不好,因为您在商店和视图层中都添加了状态逻辑,而选项 3 增加了复杂性reducer 函数,从长远来看是你不想要的
-
确实固执己见 :) 毕竟我选择了 1.。
标签: javascript redux react-redux