Mobx-React 用法简述

一、是什么?

一个非常简单的 状态管理工具,对比 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

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

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
mobx-react是一个用于将MobxReact框架结合使用的中间件工具。它提供了一些装饰器和高阶组件,使得在React组件中使用Mobx更加方便。通过使用@inject装饰器,我们可以将Mobx的store注入到组件的props中,以便在组件中访问和使用store中的数据。同时,使用@observer装饰器可以将组件转化为观察者,使得组件能够响应store中数据的变化并进行相应的更新。这样,当store中的数据发生变化时,被观察的组件也会相应地进行更新。\[3\] #### 引用[.reference_title] - *1* [mobxreact如何使用](https://blog.csdn.net/weixin_43834567/article/details/118414211)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [React-Mobx(入门)](https://blog.csdn.net/weixin_57844432/article/details/127923571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Reactmobxmobx-react 入门](https://blog.csdn.net/sinat_17775997/article/details/82765771)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

麦田里的POLO桔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值