mobx

mobx

简化 JavaScript 应用的反应式状态管理

MobX 是一个轻量级的 JavaScript 状态管理库,基于函数式响应式编程原理。它能自动追踪状态变化并更新相关组件,简化了应用开发。MobX 支持简洁的代码风格,减少样板代码,并且不限制架构选择。这个库可以配合多种 UI 框架使用,尤其适合 React 项目。MobX 遵循 '所有可从应用状态派生的内容都应自动完成' 的核心理念,有效提升了开发效率和应用性能。

MobX状态管理响应式编程ReactJavaScriptGithub开源项目
<img src="https://yellow-cdn.veclightyear.com/835a84d5/06d2200b-8f66-4048-a5d3-8071ec209880.png" alt="logo" height="120" align="right" />

MobX

简单、可扩展的状态管理。

npm版本 OpenCollective OpenCollective 在GitHub上讨论 覆盖率状态 查看更新日志


文档

文档可在 mobx.js.org 找到。


赞助商

MobX 的存在离不开以下赞助商的慷慨支持,以及许多其他个人支持者。直接赞助对本项目的长期发展有重要影响。

🥇🥇 白金赞助商(总贡献 $5000+):🥇🥇

<br/> <a href="https://www.guilded.gg/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/6e99e90b-cb99-4c9a-9faf-bcc6d022e79e.jpg" align="center" width="100" title="Guilded" alt="Guilded" /></a> <a href="https://www.canva.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/fbb66f8c-ea41-42ec-bd73-717fcf2ab173.svg" align="center" width="100" title="Canva" alt="Canva" /></a> <a href="https://www.getparallax.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/aa16b820-279d-4428-bcc4-66ab57dc8101.png" align="center" width="100" title="Parallax" alt="Parallax" /></a>

🥇 金牌赞助商(总贡献 $2500+):

<br/> <a href="https://www.one-beyond.com"><img src="https://yellow-cdn.veclightyear.com/835a84d5/42649d66-7f48-49be-94e5-8a1669652772.png" align="center" width="100" title="One Beyond" alt="One Beyond"/></a> <a href="https://frontendmasters.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/bc0fc3fb-6237-4175-b8ec-b6acf9d90e0d.jpg" align="center" width="100" title="Frontend Masters" alt="Frontend Masters"></a> <a href="http://auctionfrontier.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/df41885d-5824-4b0f-922e-c9316f1dce8a.jpeg" align="center" width="100" title="Auction Frontier" alt="Auction Frontier"></a> <a href="https://www.codefirst.co.uk/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/c2607dac-c693-404b-9f4f-9bb7bf2857b2.png" align="center" width="100" title="CodeFirst" alt="CodeFirst"/></a> <a href="https://modulz.app/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/98a5a6c9-9ac4-421d-959a-e2da01630c31.png" align="center" width="100" title="Modulz" alt="Modulz"/></a> <a href="https://coinbase.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/ee3c2d19-19d8-42df-889c-a1ccaa771730.jpeg" align="center" width="100" title="Coinbase" alt="Coinbase" /></a> <a href="https://curology.com/blog/tech"><img src="https://yellow-cdn.veclightyear.com/835a84d5/5eac5023-6d86-4243-9bc1-d5642fbda110.png" align="center" width="100" title="Curology" alt="Curology"/></a> <a href="https://mendix.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/615bc57d-040f-4247-b684-aafb31a30dd8.png" align="center" width="100" title="Mendix" alt="Mendix" /></a> <a href="https://opensource.facebook.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/6bb50ea6-0a70-4c5a-9c1c-a611c0175893.jpeg" align="center" width="100" title="Facebook Open Source" alt="Facebook Open Source" /></a> <a href="https://casinosites.ltd.uk/?utm_source=sponsorship&utm_medium=mobx&utm_campaign=readme"><img src="https://yellow-cdn.veclightyear.com/835a84d5/660101cf-c0e0-4c34-a60c-ad04fb1cf1ee.png" align="center" width="100" title="Casino Sites" alt="Casino Sites"/></a> <a href="https://www.bugsnag.com/platforms/react-error-reporting?utm_source=MobX&utm_medium=Website&utm_content=open-source&utm_campaign=2019-community&utm_term=20190913"><img src="https://yellow-cdn.veclightyear.com/835a84d5/250565e5-7b6d-4aeb-a765-5b88eb380b8c.jpg" align="center" width="100" title="Bugsnag" alt="Bugsnag"/></a>

🥈 银牌赞助商(总贡献 $500+):<br/>

<a href="https://mantro.net/jobs/warlock"><img src="https://yellow-cdn.veclightyear.com/835a84d5/34964bfa-c565-4666-ba45-2534aa6f895b.png" align="center" width="100" title="mantro GmbH" alt="mantro GmbH"></a> <a href="https://www.xh.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/47784740-ae3c-464b-af26-d8ccdc75b0cc.png" align="center" width="100" title="Extremely Heavy" alt="Extremely Heavy" /></a> <a href="https://www.algolia.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/cc273ca3-205f-4cd4-aea6-54d3066dda0e.jpg" align="center" width="100" title="Algolia" alt="Algolia" /></a> <a href="https://space307.com/?utm_source=sponsorship&utm_medium=mobx&utm_campaign=readme"><img src="https://yellow-cdn.veclightyear.com/835a84d5/1c2431c3-b0d2-4c9e-8aea-9fab0596880d.png" align="center" width="100" title="Space307" alt="Space307"/></a> <a href="https://blokt.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/6460d5fd-6a40-4f59-95da-0ab8c89ecaed.jpg" align="center" width="100" title="Blokt" alt="Blokt"/></a> <a href="https://upper.co/?utm_source=github_mobxjs_sponsorship&utm_medium=paid_acquisition&utm_campaign=sponsorship"><img src="https://yellow-cdn.veclightyear.com/835a84d5/ebc7626c-1ec3-48a7-8379-88f83116acf1.png" align="center" width="100" title="UPPER" alt="UPPER"/></a> <a href="https://careers.dazn.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/e64574bc-9ebd-4f5a-bee1-589ae5429298.png" align="center" width="100" title="DAZN" alt="DAZN"></a> <a href="https://talentplot.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/272698ef-4356-437e-b86f-fa5c644b8658.png" align="center" width="100" title="talentplot" alt="talentplot"></a> <a href="https://www.easeus.com/?utm_source=github_mobxjs_sponsorship&utm_medium=readme&utm_campaign=sponsorship"><img src="https://yellow-cdn.veclightyear.com/835a84d5/a29db26e-bc6c-49e1-9d80-e1fcc6277999.png" align="center" width="100" title="EaseUS" alt="EaseUS"/></a> <a href="https://route4me.com/"><img src="https://yellow-cdn.veclightyear.com/835a84d5/ecf183d3-844a-4b79-86bb-31a55c7b0ba3.png" align="center" width="100" title="Route Planner and Route Optimizer" alt="Route Planner and Route Optimizer"/></a>

简介

任何可以从应用状态派生的内容,都应该自动进行派生。 MobX是一个基于信号、经过实战检验的库,通过透明地应用函数式响应式编程,使状态管理变得简单和可扩展。 MobX背后的理念很简单:

<div class="benefits"> <div> <div class="pic">😙</div> <div> <h4>直观</h4> <p>编写简洁、无样板的代码来表达你的意图。 想要更新记录字段?只需使用普通的JavaScript赋值 — 响应式系统会检测到所有的更改并将其传播到使用它们的地方。 在异步过程中更新数据时不需要特殊工具。 </p> </div> </div> <div> <div class="pic">🚅</div> <div> <h4>轻松实现最佳渲染</h4> <p> 在运行时跟踪数据的所有变化和使用情况,构建一个捕获状态和输出之间所有关系的依赖树。 这保证了依赖于你的状态的计算(如React组件)只在严格需要时运行。 无需使用容易出错且效率不高的技术(如记忆化和选择器)来手动优化组件。 </p> </div> </div> <div> <div class="pic">🤹🏻‍♂️</div> <div> <h4>架构自由</h4> <p> MobX不拘泥于固定模式,允许你在任何UI框架之外管理应用状态。 这使你的代码解耦、可移植,最重要的是,易于测试。 </p> </div> </div> </div>

快速示例

那么,使用MobX的代码是什么样的呢?

import React from "react" import ReactDOM from "react-dom" import { makeAutoObservable } from "mobx" import { observer } from "mobx-react-lite" // 模拟应用状态 function createTimer() { return makeAutoObservable({ secondsPassed: 0, increase() { this.secondsPassed += 1 }, reset() { this.secondsPassed = 0 } }) } const myTimer = createTimer() // 构建使用可观察状态的"用户界面" const TimerView = observer(({ timer }) => ( <button onClick={() => timer.reset()}>已过秒数: {timer.secondsPassed}</button> )) ReactDOM.render(<TimerView timer={myTimer} />, document.body) // 每秒更新一次"已过秒数: X"文本 setInterval(() => { myTimer.increase() }, 1000)

包裹TimerView React组件的observer会自动检测到渲染依赖于timer.secondsPassed可观察量,尽管这种关系并未明确定义。响应式系统会在未来恰好该字段更新时负责重新渲染组件。

每个事件(onClick / setInterval)都会调用一个更新可观察状态(myTimer.secondsPassed)的动作(myTimer.increase / myTimer.reset)。 可观察状态的变化会精确地传播到所有依赖于所做更改的计算和副作用(TimerView)。

<img alt="MobX单向流" src="https://yellow-cdn.veclightyear.com/835a84d5/22187bf2-1466-49ca-a4d8-eb5ed3d5c548.png" align="center" />

这个概念图可以应用于上面的例子,或任何使用MobX的其他应用。

入门

要通过更大的例子了解MobX的核心概念,请查看**MobX要点页面,或尝试MobX和React的10分钟交互式介绍**。 博客文章UI作为后思考如何解耦状态和UI(又名:你不需要componentWillMount)也详细描述了MobX提供的心智模型的理念和优势。

更多资源

MobX书籍

<a href="https://www.packtpub.com/product/mobx-quick-start-guide/9781789344837"><img src="https://yellow-cdn.veclightyear.com/835a84d5/06380975-5c75-4386-a5ab-5819937d4f12.jpg" height="120px" /></a>

MobX快速入门指南(24.99美元)由Pavan PodilaMichel Weststrate编写,有电子书平装书O'Reilly平台版本(查看预览)。

视频

致谢

MobX受到响应式编程原则的启发,这些原则例如用于电子表格中。它受到模型-视图-视图模型框架的启发,如MeteorJS的TrackerKnockoutVue.js,但MobX将透明函数式响应式编程(TFRP,这个概念在MobX书籍中有进一步解释)推向了新的高度,并提供了独立的实现。它以无故障、同步、可预测和高效的方式实现了TFRP。

非常感谢Mendix,他们提供了灵活性和支持来维护MobX,并有机会在真实、复杂、性能关键的应用中证明MobX的理念。

编辑推荐精选

QoderWork

QoderWork

阿里Qoder团队推出的桌面端AI智能体

QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。

音述AI

音述AI

全球首个AI音乐社区

音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。

lynote.ai

lynote.ai

一站式搞定所有学习需求

不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。

AniShort

AniShort

为AI短剧协作而生

专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。

seedancetwo2.0

seedancetwo2.0

能听懂你表达的视频模型

Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。

nano-banana纳米香蕉中文站

nano-banana纳米香蕉中文站

国内直接访问,限时3折

输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

下拉加载更多