Redux / sagas:更大API的方法

时间:2017-05-10 14:41:11

标签: javascript reactjs redux

我已经在基于此real-world example的小型项目上使用了Redux / sagas工作流程,但这些工作的逻辑并不那么复杂。我应该如何处理更全面的api(即Reddit的API),而不会让事情过于冗长?

  • 我是否为每个端点制作const?即, export const fetchUser = login => callApi(`users/${login}`, userSchema)
  • 我应该担心管理entity cache吗?
  • 有没有办法进一步降低复杂性/样板(即使用同一端点的get / put / post / delete进一步分组请求类型)?
  • 那里有没有比real-world
  • 更大/更复杂的例子

1 个答案:

答案 0 :(得分:2)

我认为答案取决于您希望组件的流动程度。

我正在使用sagas处理大型代码库,我们的页面被分成"类型",例如" list"类型,"形式"类型等。

我们有一个负责获取内容的saga,而每个pageComponent在呈现时负责提供端点。

这允许采用非常模块化的方法来添加处理文件系统的一个子部分所需的组件。

我们的网页主要是一个包含所有这些信息的配置文件,我们使用此配置来呈现"泛型"具有正确数据的组件。

Saga可重用性

我认为Sagas是顺序进程,可以用于异步获取数据,但它们对于需要按顺序处理的任何内容都很有用。
这些"流程"在代码库中有时非常相似,那些是你想要概括的那些 就像你说的,最常见的操作是任何端点的CRUD,可以很容易地组合在一起。

LoginloadUserList极为不同,之后需要发生不同的事情,但loadUserListloadRepoList非常相似。

影响可重用性的事情

  1. 您控制API的能力,如果您可以决定所使用的API的形状,您可以在前端获得更多的概括。

  2. 应用程序的形状(正面) - 您的页面是否奇怪地依赖于彼此的状态?例如,保险计划的表格相互链接并不少见,您可以按照您想要的任何顺序填写前3个表格,但一旦完成全部三个表格,第4个解锁。
    这些依赖中的每一个通常都有自己的传奇来控制你的使用故事。

  3. 您的申请是否需要同步?您可以轻松创建自动与您的不同端点同步数据的传闻并更新您的Redux状态,这里需要考虑很多,包括我们是否决定用新数据打断用户(我们可能想让他知道表格他的编辑已经过时的数据) - 同步需要一个独特的传奇,因为通常有各种业务规则来同步什么数据 - 如果规则非常不同,这可能会迫使你创建多个传奇)
  4. 可以统一的常见Sagas

    1. UserSagas - 登录,退出。
    2. FetchData - 获取单个记录或集合。
    3. DeleteData - 删除单个记录或ID集合
    4. 数据同步 - 定期从远程更新本地数据。
    5. 关于实体缓存

      实体缓存只是他们选择的名称,但这可以追溯到前面提到的几点。

      您的应用程序是在陈旧数据上运行,还是每次加载组件时都从服务器获取? 如果数据仅被提取一次并且您显示过时数据,则您将其存储在一种缓存中(基本上是redux存储)。
      如果您显示过时数据,这是要走的路。