安装
MobX 可在任何 ES5 环境(包括浏览器和 NodeJS)中运行。
MobX 有两种 React 绑定方式,其中 mobx-react-lite 仅支持函数组件,mobx-react 还支持基于类的组件。可以使用 Yarn、NPM、CDN 集成 MobX 到您的项目中:
Yarn: yarn add mobx
NPM: npm install --save mobx
CDN: https://cdnjs.com/libraries/mobx / https://unpkg.com/mobx/dist/mobx.umd.production.min.js
对类属性使用符合规范的转换
⚠️ Warning: 当 MobX 与 TypeScript 或者 Babel 一起使用时,且计划使用类;因为 TC-39 不是默认配置,请检查你的配置文件,确保使用 TC-39 规范兼容的配置转换类字段。否则,无法在初始化类字段之前使其可观察。
- Babel: 请确保至少使用版本号为 7.12 的 babel. 使用@babel/plugin-proposal-class-properties plugin, babel 针对类属性的配置为
["@babel/plugin-proposal-class-properties", { "loose": false }]
- TypeScript, 设置编译器选项为
"useDefineForClassFields": true
在较旧的 JavaScript 环境中使用 MobX
默认情况下,MobX 使用Proxy
来获得最佳性能和兼容性。但是在较旧的 JavaScript 引擎Proxy
上不可用 (请查看 Proxy support)。例如 Internet Explorer(Edge 之前),Node.js <6,iOS <10,RN 0.59 之前的 Android 或 iOS 上的 Android。
在这种情况下,MobX 可以回退到与 ES5 兼容的实现,该实现几乎相同地工作,尽管不使用Proxy
有一些限制limitations without Proxy support。您将必须通过配置明确启用降级方案 useProxies
:
import { configure } from "mobx";
configure({ useProxies: "never" }); // Or "ifavailable".
MobX 和装饰器
如果你以前使用过 Mobx,或者你看过在线教程,你可能会看到 Mobx 可以使用带有 @observable
这样的装饰器。在 Mobx 6 中,为了与标准 JavaScript 的最大兼容性,我们在默认情况下放弃了装饰器。但如果启用它们,它们仍然可以使用。
译者注: 如果好奇放弃原因,可以到 👉🏻官方 issue 和 TC39 Class 查看了解更多信息。
其他框架/平台上的 MobX
- MobX.dart: 适用于 Flutter / Dart 的 Mobx
- lit-mobx: 适用于 lit-element 的 MobX
- mobx-angular: 适用于 angular 的 MobX
- mobx-vue: 适用于 Vue 的 Mobx