@concord-consortium/mobx-state-tree

中文文档
6.0.0-cc.1发布于 2024/05/29MITTypeScriptESM + CJS零依赖近 30 天下载 2761

Opinionated, transactional, MobX powered state container

原始使用文档
文档目录3 节
  1. What is mobx-state-tree?
  2. Quick Code Example
  3. Thanks!
logo

mobx-state-tree

npm version CircleCI Have a question? Ask on GitHub Discussions!

What is mobx-state-tree?

Technically speaking, mobx-state-tree (also known as MST) is a state container system built on MobX, a functional reactive state library.

This may not mean much to you, and that’s okay. I’ll explain it like this: MobX is a state management "engine", and MobX-State-Tree gives it structure and common tools you need for your app. MST is valuable in a large team but also useful in smaller applications when you expect your code to scale rapidly. And if we compare it to Redux, MST offers better performance and much less boilerplate code than Redux!

MobX is one of the most popular Redux alternatives and is used (along with MobX-State-Tree) by companies worldwide. MST plays very well with TypeScript, React, and React Native, especially when paired with mobx-react-lite. It supports multiple stores, async actions and side effects, enables extremely targeted re-renders for React apps, and much more -- all in a package with zero dependencies other than MobX itself.

Note: you don't need to know how to use MobX in order to use MST.

Getting started

See the Getting started tutorial or follow the free egghead.io course.

👉 Official docs can be found at http://mobx-state-tree.js.org/

Quick Code Example

There's nothing quite like looking at some code to get a feel for a library. Check out this small example of an author and list of tweets by that author.

import { types } from "mobx-state-tree" // alternatively: import { t } from "mobx-state-tree"

// Define a couple models
const Author = types.model({
  id: types.identifier,
  firstName: types.string,
  lastName: types.string
})
const Tweet = types.model({
  id: types.identifier,
  author: types.reference(Author), // stores just the `id` reference!
  body: types.string,
  timestamp: types.number
})

// Define a store just like a model
const RootStore = types.model({
  authors: types.array(Author),
  tweets: types.array(Tweet)
})

// Instantiate a couple model instances
const jamon = Author.create({
  id: "jamon",
  firstName: "Jamon",
  lastName: "Holmgren"
})

const tweet = Tweet.create({
  id: "1",
  author: jamon.id, // just the ID needed here
  body: "Hello world!",
  timestamp: Date.now()
})

// Now instantiate the store!
const rootStore = RootStore.create({
  authors: [jamon],
  tweets: [tweet]
})

// Ready to use in a React component, if that's your target.
import { observer } from "mobx-react-lite"
const MyComponent = observer((props) => {
  return <div>Hello, {rootStore.authors[0].firstName}!</div>
})

// Note: since this component is "observed", any changes to rootStore.authors[0].firstName
// will result in a re-render! If you're not using React, you can also "listen" to changes
// using `onSnapshot`: https://mobx-state-tree.js.org/concepts/snapshots

Thanks!

  • Michel Weststrate for creating MobX, MobX-State-Tree, and MobX-React.
  • Infinite Red for supporting ongoing maintenance on MST.
  • Mendix for sponsoring and providing the opportunity to work on exploratory projects like MST.
  • Dan Abramov's work on Redux has strongly influenced the idea of snapshots and transactional actions in MST.
  • Giulio Canti's work on tcomb and type systems in general has strongly influenced the type system of MST.
  • All the early adopters encouraging to pursue this whole idea and proving it is something feasible.

版本与发布记录

@concord-consortium/mobx-state-tree 共发布 5 个版本,首次发布于 2022/08/25;过去 12 个月发布了 0 个版本。

版本发布日期距今
6.0.0-cc.1latest2024/05/292 年前
5.4.0-cc.12024/02/052 年前
5.1.8-cc.22023/07/273 年前
5.1.8-cc.12023/05/033 年前
5.1.5-cc.12022/08/254 年前

关于 @concord-consortium/mobx-state-tree 的常见问题

@concord-consortium/mobx-state-tree 是什么?

Opinionated, transactional, MobX powered state container

如何安装 @concord-consortium/mobx-state-tree?

在项目目录运行 npm install @concord-consortium/mobx-state-tree,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:mobx(^6.3.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@concord-consortium/mobx-state-tree 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@concord-consortium/mobx-state-tree 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@concord-consortium/mobx-state-tree 可以商用吗?

@concord-consortium/mobx-state-tree 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@concord-consortium/mobx-state-tree 的下载量有多少?

根据 npm 官方下载统计,@concord-consortium/mobx-state-tree 在 2026/10/11 – 2026/11/09 这 30 天内被下载 2,761 次,日均约 92 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@concord-consortium/mobx-state-tree 还在维护吗?

最新版本 6.0.0-cc.1 发布于 2024/05/29(2 年前);至今共发布 5 个版本,其中过去 12 个月发布了 0 个;首次发布于 2022/08/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。