Mobx-React 用法简述

本文介绍MobX状态管理工具的基本概念、工作原理及使用方法。通过对比Redux,突显MobX的优势:易于理解和上手,编写便捷。文章还详细讲解了MobX装饰器语法的应用,并提供了从安装到使用的完整指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、是什么?

一个非常简单的 状态管理工具,对比 ReduxMobx 会更容易上手,更容易理解,且编写方便。

二、原理

利用 getter、setter 收集组件中的数据依赖关系,从而在数据变化时,精确地知道哪些组件需要重绘,界面规模非常庞大时,就会有很多细粒度的更新。
在这里插入图片描述

三、使用方法

1. 直接借助 Javascript(不推荐)

const map = observable.map({ key: "value"});
map.set("key", "new value");

const list = observable([1, 2, 4]);
list[2] = 3;

const person = observable({
    firstName: "Clive Staples",
    lastName: "Lewis"
});
person.firstName = "C.S.";

const temperature = observable.box(20);
temperature.set(25);

2. ES6 的 装饰器语法

下面会详细介绍 mobx 的装饰器语法使用方式

import { observable, computed } from "mobx";

class OrderLine {
    @observable price = 0;
    @observable amount = 1;

    @computed get total() {
        return this.price * this.amount;
    }
}

3. 使用前的准备

### 1. 安装 mobx
npm install mobx -S

### 2. 安装 mobx 与 react 关联工具
npm install mobx-react -S

### 3. 安装两个插件,以支持 ES6 的 mobx 语法
npm install @babel/plugin-proposal-decorators -D
npm install @babel/plugin-proposal-class-properties -D

### 4. 在 package.json 中配置上述两个插件
"babel": [
  "plugins": [
	[
	  "@babel/plugin-proposal-decorators",
	  {
		"legacy": true
	  }
    ],
    [
	  "@babel/plugin-proposal-class-properties",
	  {
		"loose": true
	  }
    ]
  ]
]

### 5. ESLint 配置
"eslintConfig": {
  "parserOptions": {
	"ecmaFeatures": {
	  "legacyDecorators": true
	}
  }
}

4. 语法

  • @observable:定义 state
  • @computed:定义一个方法,当依赖的 state 发生改变时,自动重新计算,自动地将最新的结果渲染至调用的地方
  • @action:定义操作 state 的方法
  • 将所有定义好的 api 封装进一个 store class 即 AppStore
  • export AppStore 的实例化对象 store
  • 在需要使用 state 的组件外,包装一个 <Provider store={store}></Provider> 组件,内部的所有组件就都可以拿到 store 中的所有 state
  • 内部的组件需要使用 store 中的 state 时,需要先借助 @inject 将 store 注入
  • 借助 @observer,对页面使用的 store 中的 state 进行观察,使用了该 api,页面的 state 会自动随着 store 中的 state 发生变化
  • store 作为 props 被传递至使用 state 的组件
  • AppStore 中封装的所有定义的所有方法,都可以在子组件中借助 store.xxx 进行使用

5. 具体应用的 Demo

### 文件结构
|——src
	|——pages
	|	 |——home.js
	|——store
	|	 |——index.js 
	|——App.js
	|——index.js
1)store-index.js

在这里插入图片描述
在这里插入图片描述

2)App.js

在这里插入图片描述

3)page-home.js

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦田里的POLO桔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值