3

在异步操作创建器中,我从服务器获取数据。对于我的用例,数据的格式不是很好,我需要对其进行转换以在 UI 中使用它。

问题:我应该

  1. 在使用转换后的数据发送成功操作之前转换数据?

    fetch("some/url")
    .then(res => dispatch(successActionCreator(transform(res)))
    
  2. 使用原始数据发送成功操作并将其存储为,并在内部进行转换mapStateToProps

  3. 使用原始数据发送成功操作并在 reducer 中进行转换?

1.中,数据会在我需要的时候进行转换,在我看来它解耦了 API 数据格式和我的 Redux 存储。但是转换逻辑在数据获取操作中。

2.中,异步操作创建者保持简单,完全没有逻辑,映射发生在 UI 层。但这意味着我需要使用 reselect 之类的东西来优化它,因为mapStateToProps每次渲染都会调用它。

3.中,异步操作创建者保持简单,完全没有逻辑,但操作与 API 数据格式耦合。

我会选择1。(无论如何都要对转换进行单元测试),但我并不完全满意。有什么建议吗?谢谢 !

- 编辑:由于这个问题是一个自以为是的答案,我有点在这里回答我自己。由于评论中所述的所有原因和答案之一,我将选择1. 。

4

1 回答 1

3

选项 1 是正确答案。

如果您传递原始服务器响应,则您将客户端耦合到服务器端实现。隔离这些类型的转换对于应用程序的未来可维护性很重要。

于 2016-02-25T13:48:53.813 回答