- 内容简介
- 译者序
- 前言
- 第 1 章 安装配置新项目
- 第 2 章 Flexbox 布局介绍
- 第 3 章 用 React Native 开发一个应用
- 第 4 章 在 React Native 中使用导航
- 第 5 章 动画和滑动菜单
- 第 6 章 用 React Native 绘制 Canvas
- 第 7 章 使用 React Native 播放音频
- 第 8 章 你的第一个自定义视图
- 第 9 章 Flux 介绍
- 第 10 章 处理复杂的应用程序状态
- 第 11 章 使用 Node 来实现服务端 API
- 第 12 章 在 React Native 中使用文件上传
- 第 13 章 理解 JavaScript Promise
- 第 14 章 fetch 简介
- 第 15 章 在 iOS 中使用 SQLite
- 第 16 章 集成 Google Admob
- 第 17 章 React Native 组件国际化
- 附录 A React.js 快速介绍
- 附录 B Objective-C Primer
- 附录 C webpack 入门
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
使用 Baobab 树构建应用程序状态
传统上,我认为 Web 开发者会把 state 当作一个会话或者数据库实例。当在客户端开发更先进的 Web 应用程序时,我们得到了一些新的状态,并且可以控制这些状态。从待办事项列表到 UI 加载,处处都会用到应用程序的 state。因此,在 Baobab 中,由一棵树来表示应用程序的所有状态。
如何在树中构建状态?有很多方法可以做到这一点,我不能告诉你最好的办法是什么,这取决于项目和个人偏好。下面是我喜欢的一种方式。
var Baobab = require('baobab'); var stateTree = new Baobab({ models: { notifications: [], contacts: [] }, views: { createContact: { isLoading: false } } }); module.exports = stateTree;
这上面的例子中,我选择了模型和视图的分离,这是我们现代 Web 应用程序的传统概念。实体相关的放入模型(model)中,UI 相关的放入视图(view)中。
模型可能不会带来太多的惊喜,但也许视图可以。之所以定义视图,是因为一个视图中可以放很多组件。通过将状态添加到状态树中来确保组件的任何改变或者增加新的组件都与树相关,而不是彼此相关。
这下面的例子中,我们选择通过区块来划分树。我建议在较大的应用程序中使用这种写法。这将使应用程序特定区块的组件更容易监听与它们相关的状态改变,同样也允许跨区块状态,例如 home 区块需要显示通知的条数,这将不是一个问题。
var Baobab = require('baobab'); var stateTree = new Baobab({ admin: {
notifications: [] }, home: { posts: [] } });
第三个例子仅仅是直接把状态加到树中,适用于更小的应用程序。
var Baobab = require('baobab'); var stateTree = new Baobab({ notifications: [] }); module.exports = stateTree;
我的意思是,构建状态时没有特定的结构。应用程序的不同决定了结构的不同。
你不必为了避免循环依赖而人为地划分状态,也不需要使用 waitFor 方法(它会让你的代码很难读)。随着应用程序的增长,使用状态树这种方式可以很容易地改变状态的结构。这真是太棒了!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论