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

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

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

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多