零、前言

反应式编程几十年来一直吸引着程序员的想象力。一旦四人帮将观察者设计模式标准化,该术语就成为每个程序员标准词汇表的一部分:

Observer : Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. – Design Patterns, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, 1995

尽管如此,有各种各样的技术、库和框架实现了观察者模式。然而,MobX 将这种模式应用于状态管理的方式是独一无二的。它有一个非常友好的语法,一个小的核心 API,使初学者易于学习,并且可以应用于任何 JavaScript 项目。此外,该库已被证明是可扩展的,不仅在该项目首次应用的 Mendix,而且在著名的项目中,如 Microsoft Outlook、DICE 的战地 1、Jenkins、Coinbase 等。

这本书将不仅指导你通过基本知识;它还将让您沉浸在 MobX 的哲学中:任何可以从应用状态派生的东西都应该派生出来。自动地*

MobX 并不是同类产品中的第一款,但它站在巨人的肩膀上,已经突破了透明反应式编程范式的界限。例如,据作者所知,它是第一个将反应性与同步事务相结合的主要库,也是第一个明确区分派生值和自动副作用(反应)概念的库。

与许多学习材料不同,本书指导您了解 MobX 的内部工作原理及其许多扩展点。这本书希望能给人留下一个持久的印象,即一个本质上简单(且可读性很强!)的范例可以用来完成非常具有挑战性的任务,不仅是在领域复杂性方面,而且在性能方面。

这本书是给谁的

状态管理在任何应用中都扮演着至关重要的角色,在这些应用中,状态与代码库中的不同位置相关。这是因为存在多个数据消费者或多个数据生产者。实际上,这意味着 MobX 在任何具有大量数据输入或数据可视化的应用中都很有用。

MobX 有 React.js、Preact 和 Angular 的官方绑定。但是,许多人将该库与 jQuery、konva.js、Next.js、Vue.js 甚至主干网等库和框架结合使用。在阅读本书时,您会发现使用 MobX 等工具所需的概念在任何环境中都是普遍适用的。

这本书涵盖的内容

第一章状态管理导论从概念上处理状态管理及其许多细微差别开始。它介绍了副作用模型,并为您准备了理解 MobX 所需的哲学。最后,本文介绍了 MobX 及其一些核心构建块。

第 2 章观察物、动作和反应更深入地了解了 MobX 的核心构建块。它向您展示了创建可观察对象的各种方式,使用操作导致可观察对象发生突变,最后,使用反应对可观察对象上发生的任何变化作出反应。这三个构成了 MobX 的核心三元组。

第 3 章一款带有 MobX 的 React 应用结合了迄今为止获得的知识,为带有 MobX 的 React 应用提供了动力。它解决了在网上商店中搜索书籍的用例。该应用是通过首先识别核心可观察状态,使用动作改变状态,并通过 mobx react 的observer()实用程序使用反应来构建的。React 组件是对可观察状态的更改作出反应并自动呈现新状态的观察者。本章将让您初步了解 MobX 对于 React 应用中的状态管理有多么简单。

第 4 章制作可观察树,将激光焦点放在设计 MobX 中具有各种选项的可观察状态上。我们将讨论如何限制 MobX 中的可观察性,并学习如何创建一个只观察必要内容而不观察其他内容的紧密可观察状态。除了限制可观测性之外,我们还将看到如何使用extendObservable()扩展可观测性。最后,我们将研究计算属性以及 ES2015 类对可观察状态建模的使用。

第 5 章衍生、动作和反应进一步探讨了 MobX 的核心构建块,并更详细地探讨了 API。它还涉及管理这些构建块的哲学。本章结束时,您将巩固对 MobX 的理解和核心直觉。

第 6 章处理现实世界的用例,我们将 MobX 应用于两个重要的现实世界用例:表单处理和页面路由。两者在本质上都是非常直观的,但我们会说,当在 MobX 中表示为可观察的状态、动作和反应时,它们可以更容易地处理。此表示使 React 组件(观察者成为状态的自然视觉延伸。我们还将围绕 MobX 的状态建模开发我们的核心直觉。

第 7 章特例专用 API*是对低级别、有能力但隐藏在顶级 API 阴影中的 API 的调查。例如observable()action()computed()reaction()。我们将探索这些低级 API,然后简要介绍可供 MobX 开发人员使用的调试实用程序。知道 MobX 从各个角度都支持你是一件令人欣慰的事情,即使是在那些罕见的、奇怪的情况下。

第 8 章探索 mobx UTIL 和 mobx 状态树,让您体验一些有用的包,这些包可以简化 mobx 驱动开发中遇到的日常用例。顾名思义,mobx utils 是一种包含各种功能的实用工具带。另一方面,功能强大的 mobx 状态树(通常称为 MST)规定了一种可伸缩 mobx 应用的方法,一旦采用了 MST 的思维方式,就可以免费获得模式。这是一个值得升级到 MobX 和一个必须有严重的用户。

第 9 章MobX 内部是我们通过剥离各层并窥视 MobX 内部工作来达到高潮的地方。核心抽象出人意料地简单且定义良好,它们整齐地划分了职责。如果术语 t透明函数式反应式编程听起来像一门黑色艺术,那么这一章将揭示这一魔力,并揭示 MobX 是如何接受它的。本章也是对 MobX 代码库的入门,对于任何有志成为 MobX 项目核心贡献者的人来说都是值得一读的。

充分利用这本书

MobX 通常用于编程环境,在这些环境中,长期存在的内存状态起着重要作用,最显著的是 web、移动和桌面应用。本书要求对 JavaScript 编程语言有基本的了解,并将在其示例中使用现代ES2015语法。前端示例基于 ReactJS 框架,因此熟悉它会很有用,但不是必需的。

下载示例代码文件

您可以从您的账户www.packtpub.com下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packtpub.com/support并注册,将文件通过电子邮件直接发送给您。

您可以通过以下步骤下载代码文件:

  1. 登录或注册www.packtpub.com
  2. 选择“支持”选项卡。
  3. 点击代码下载和勘误表。
  4. 在搜索框中输入图书名称,然后按照屏幕上的说明进行操作。

下载文件后,请确保使用以下最新版本解压或解压缩文件夹:

  • WinRAR/7-Zip for Windows
  • 适用于 Mac 的 Zipeg/iZip/UnRarX
  • 适用于 Linux 的 7-Zip/PeaZip

该书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/MobX-Quick-Start-Guide 。如果代码有更新,它将在现有 GitHub 存储库中更新。

我们的丰富书籍和视频目录中还有其他代码包,请访问https://github.com/PacktPublishing/ 。看看他们!

下载彩色图像

我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:http://www.packtpub.com/sites/default/files/downloads/MobXQuickStartGuide_ColorImages.pdf

行动中的代码

访问以下链接查看正在运行的代码的视频: http://bit.ly/2NEww85

使用的惯例

本书中使用了许多文本约定。

CodeInText:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。下面是一个示例:“将下载的WebStorm-10*.dmg磁盘映像文件作为系统中的另一个磁盘装载。”

代码块设置如下:

connect(mapStateToProps, mapDispatchToProps, mergeProps, options)(Component)

当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:

import { observable, autorun, action } from 'mobx';

let cart = observable({
    itemCount: 0,
    modified: new Date(),
});

任何命令行输入或输出的编写方式如下:

$ mkdir css
$ cd css

粗体:表示一个新术语、一个重要单词或您在屏幕上看到的单词。例如,菜单或对话框中的单词出现在文本中,如下所示。下面是一个示例:“从管理面板中选择系统信息。”

Warnings or important notes appear like this. Tips and tricks appear like this.

联系

我们欢迎读者的反馈。

一般反馈:发送电子邮件feedback@packtpub.com并在邮件主题中提及书名。如果您对本书的任何方面有疑问,请发送电子邮件至questions@packtpub.com

勘误表:尽管我们已尽一切努力确保内容的准确性,但还是会出现错误。如果您在本书中发现错误,如果您能向我们报告,我们将不胜感激。请访问www.packtpub.com/submit-errata,选择您的书籍,点击 errata 提交表单链接,然后输入详细信息。

盗版:如果您在互联网上发现我们作品的任何形式的非法复制品,请您提供我们的位置地址或网站名称,我们将不胜感激。请通过copyright@packtpub.com与我们联系,并提供该材料的链接。

如果您有兴趣成为一名作家:如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请访问authors.packtpub.com

评论

请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在读者可以看到并使用您的无偏见意见做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们书籍的反馈。非常感谢。

有关 Packt 的更多信息,请访问packtpub.com。**