MobX

MobX

  • API 参考
  • English Doc
  • 赞助商
  • GitHub

›Introduction

Introduction

  • 关于 MobX
  • 关于本文档
  • 安装
  • MobX 主旨

MobX core

  • Observable state
  • Actions
  • Computeds
  • Reactions {🚀}

MobX and React

  • 集成React(react-integration)
  • React 优化 {🚀}

Tips & Tricks

  • 定义数据存储
  • 理解响应性
  • 使用子类
  • 分析响应性 {🚀}
  • 含参数的计算值 {🚀}
  • MobX-utils {🚀}
  • 自定义 observables {🚀}
  • 惰性 observables {🚀}
  • 集合工具 {🚀}
  • 拦截与观察 {🚀}

Fine-tuning

  • 配置 {🚀}
  • 启用装饰器语法 {🚀}
  • 从MobX 4/5迁移 {🚀}

Others

  • 链接
Edit

安装

MobX 可在任何 ES 5 环境中工作,包括浏览器和 Node.js。

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

转义设置

MobX 和装饰器

MobX 是否和装饰器一起使用可取决于您的偏好,当前旧版实现和标准化的 TC-39 版本装饰器都被支持。关于如何启用它们,可查看 /enabling-decorators.html 中的更多细节。旧版装饰器支持将在 MobX 7 中被移除,以支持标准。

对类属性使用符合规范的转换

当 MobX 与 TypeScript 或者 Babel 一起使用时,并且你计划使用类,一定要更新你的配置,才能为类字段启用一个符合 TC-39 规范的转译,因为这不总是默认值。否则,无法在初始化类字段之前使其可观察。

  • Babel:一定要用至少 7.12 版,并有以下配置:
    {
        // Babel < 7.13.0
        "plugins": [
            ["@babel/plugin-proposal-class-properties", { "loose": false }]
        ],
    
        // Babel >= 7.13.0 (https://babeljs.io/docs/en/assumptions)
        "plugins": [["@babel/plugin-proposal-class-properties"]],
        "assumptions": {
            "setPublicClassFields": false
        }
    }
    
  • TypeScript:设置编译器选项为 "useDefineForClassFields": true。

将以下代码插入你源码的开头(如 index.js)以便校验:

if (!new (class { x; })().hasOwnProperty("x"))
    throw new Error("转译器配置错误");

在较旧的 JavaScript 环境中使用 MobX

默认情况下,MobX 使用 Proxy 来获得最佳性能和兼容性。然而,在较旧的 JavaScript 引擎中 Proxy 不可用(查看 Proxy 支持)。例如 Internet Explorer(Edge 之前)、Node.js < 6、iOS < 10、Android(RN 0.59 之前)或 iOS 上的 Android。

在这些情况下,MobX 可以回退到 ES 5 兼容实现,其工作原理几乎相同, 尽管它有一些缺少 Proxy 支持的限制。你必须配置 useProxies 来显示启用后备实现:

import { configure } from "mobx";

configure({ useProxies: "never" }); // Or "ifavailable".

这个选项将在 MobX 7 中被移除。

其他框架/平台上的MobX

  • MobX.dart:MobX 的 Flutter / Dart 实现
  • lit-mobx:MobX 的 LitElement 适配
  • mobx-angular:MobX 的 Angular 适配
  • mobx-vue:MobX 的 Vue 适配
← 关于本文档MobX 主旨 →
  • MobX 和装饰器
  • 对类属性使用符合规范的转换
  • 在较旧的 JavaScript 环境中使用 MobX
  • 其他框架/平台上的MobX
MobX
Docs
About MobXThe gist of MobX
Community
GitHub discussions (NEW)Stack Overflow
More
Star