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的理念。

编辑推荐精选

Vora

Vora

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

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

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具使用教程AI营销产品酷表ChatExcelAI智能客服
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

数据安全AI助手热门AI工具AI辅助写作AI论文工具论文写作智能生成大纲
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

热门AI工具AI办公办公工具智能排版AI生成PPT博思AIPPT海量精品模板AI创作
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

下拉加载更多