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?