Github Search(示例)

我们还是使用Github 搜索来演示如何使用 ReactorKit。这个例子是使用 ReactorKit 重构以后的版本,你可以在这里下载这个例子

简介

这个 App 主要有这样几个交互:

  • 输入搜索关键字,显示搜索结果

  • 当用户滑动列表到底部时,加载下一页

  • 当用户点击某一条搜索结果是,用 Safari 打开链接

Action

Action 用于描叙用户行为:

  • updateQuery 搜索关键字变更

  • loadNextPage 触发加载下页

Mutation

Mutation 用于描状态变更:

  • setQuery 更新搜索关键字

  • setRepos 更新搜索结果

  • appendRepos 添加搜索结果

  • setLoadingNextPage 设置是否正在加载下一页

State

这个是用于描述当前状态:

  • query 搜索关键字

  • repos 搜索结果

  • nextPage 下一页页数

  • isLoadingNextPage 是否正在加载下一页

我们通常会使用这些状态来控制页面布局。

mutate()

Action 转换为 Mutation

  • 当用户输入一个新的搜索关键字时,就从服务器请求 repos,然后转换成更新 repos 事件(Mutation)。

  • 当用户触发加载下页时,就从服务器请求 repos,然后转换成添加 repos 事件。

reduce()

reduce() 通过旧的 State 以及 Mutation 创建一个新的 State

  • setQuery 更新搜索关键字

  • setRepos 更新搜索结果,以及下一页页数

  • appendRepos 添加搜索结果,以及下一页页数

  • setLoadingNextPage 设置是否正在加载下一页

bind(reactor:)

View 层进行用户输入绑定和状态输出绑定:

  • 将用户更改输入关键字行为绑定到用户行为上

  • 将用户要求加载下一页行为绑定到用户行为上

  • 将搜索结果输出到列表页上

  • 当用户点击某一条搜索结果是,用 Safari 打开链接

整体结构

我们已经了解 ReactorKit 每一个组件的功能了,现在我们看一下完整的核心代码:

GitHubSearchViewReactor.swift

GitHubSearchViewController.swift

这是使用 ReactorKit 重构以后的 Github Search。ReactorKit 分层非常详细,分工也是非常明确的。当你在处理大型应用程序时,这可以帮助你更好的管理代码。

Last updated

Was this helpful?