Mbox

news/2025/1/11 9:59:33/

Mobx

Mobx是一个功能强大,上手非常容易的状态管理工具。redux的作者也曾经向大家推荐过它,在不少情况下可以使用Mobx来替代掉redux。

在这里插入图片描述

这张图来自于官网,把这张图理解清楚了。基本上对于mobx的理解就算入门了。

官网有明确的核心概念使用方法,并配有egghead的视频教程。这里就不一一赘述了。

要特别注意当使用 mobx-react 时可以定义一个新的生命周期钩子函数 componentWillReact。当组件因为它观察的数据发生了改变,它会安排重新渲染,这个时候 componentWillReact 会被触发。这使得它很容易追溯渲染并找到导致渲染的操作(action)。

  • componentWillReact 不接收参数
  • componentWillReact 初始化渲染前不会触发 (使用 componentWillMount 替代)
  • componentWillReact 对于 mobx-react@4+, 当接收新的 props 时并在 setState 调用后会触发此钩子
  • 要触发componentWillReact必须在render里面用到被观察的变量
  • 使用Mobx之后不会触发componentWillReceiveProps

react脚手架 - Mobx配置 ( 装饰器 )

  1. 创建项目
    create-react-app app

  2. 进入项目
    cd app

  3. 进行配置文件抽离
    yarn eject

  4. 安装mobx mobx-react

    mobx 是状态管理工具

    mobx-react 是做数据分片和数据获取

    $ $yarn add mobx mobx-react
    注意: 如果git冲突
    解决: 我们要原文件先放到本地暂存盘
    git add .
    git commit -m ’

    ​ 然后 : 安装mobx mobx-react’
    ​ 注意不要git push

  5. 配置装饰器( 修饰器 es6 ) babel
    yarn add babel-plugin-transform-decorators-legacy -D
    yarn add @babel/preset-env -D
    yarn add babel-plugin-transform-class-properties -D
    yarn add @babel/plugin-proposal-decorators -D

  6. 配置package.json

   "babel": {"plugins": [["@babel/plugin-proposal-decorators",{"legacy": true}],"transform-class-properties"],"presets": ["react-app","@babel/preset-env"]},注意: 以下两个配置顺序不可更改["@babel/plugin-proposal-decorators",{"legacy": true}],"transform-class-properties"

项目中 mobx应该怎么用?

  1. 新建store目录
    src
    store
    home
    index.js
    car
    index.js
    index.js

  2. 在入口文件中 使用 Provider

   import store from './store'import { Provider } from 'mobx-react'ReactDOM.render(<Provider store = {store}><Show /></Provider>, document.getElementById('root'));
  1. 哪个组件使用 , 就在哪个组件中 “注入” inject
   import {inject} from 'mobx-react'<!-- @inject(string) -->@inject('store')
  1. 打造mobx 数据包
   import {observable, computed,action} from 'mobx'class Home {@observable  //监听 ageage = 18@computed    //当age发生改变时, 自动触发get doubleAge(){return this.age * 2}@action  // 用户操作  事件调用increment(){this.props.store.home.age ++ console.log( this.props.store.home.age )
       //数据请求fetch('/data/data.json').then(res => res.json()).then( result => console.log( result )).catch( error => console.log( error ))}}const home = new Home()export default home
  1. 打造store
    store/index.js
   import home from './home'const store = {//实例home}export default store
  1. 组件内使用数据

    this.props.store.xxx 可以拿到数据

    注意:

    1. this.porps里面没有找到 @action 装饰器定义的方法, 但是可以直接使用,

    2. this会丢失

      this.props.store.home.increment.bind(this)


http://www.ppmy.cn/news/262111.html

相关文章

mexFunction

mexFunction 在使用MATLAB编译C/C代码时&#xff0c;C/C代码中要使用一个mexFunction函数&#xff0c;那么这个函数是如何定义&#xff0c;在编译时又是如何实现的呢&#xff1f;下面我将使用实例进行说明。 如一个简单的函数&#xff1a; double add(double x, double y) { re…

UTXO介绍

什么是UTXO 在比特币钱包当中&#xff0c;我们通常能够看到账户余额&#xff0c;然而在中本聪设计的比特币系统中&#xff0c;并没有余额这个概念。“比特币余额”是由比特币钱包应用派生出来的产物。中本聪发明了UTXO交易模型&#xff0c;并将其应用到比特币当中。 UTXO&…

【UmiJS 3.x入门】

目录 1.定义 2.特点 3.搭建umi项目 4.路由分类 5.新建页面 6.页面跳转 7.路径传值 8.解析路径传值 9.请求接口 10.使用本地测试数据 11.使用umi项目自带的antd-mobile样式库 umi定位 插件化的企业前端应用框架 umi特点 可扩展&#xff1a;拥有完整的生命周期 开…

UniRX

凉鞋Qframework作者文章链接&#xff1a;https://zhuanlan.zhihu.com/p/85663335 王小TuniRX精讲链接&#xff1a;https://gitee.com/xiaoTNT/uni-rx-intensive-lecture/tree/master uniRX下载链接&#xff1a;https://assetstore.unity.com/packages/tools/integration/unirx-…

达梦数据库dblink测试(DM-ORACLE19c及DM8-DM8)

目录 DM与DM创建DBLINK. 3 一、配置203服务器... 3 1、主服务器203开启mal服务... 3 2、主服务器203配置dmmal.ini文件... 3 3、重启203数据库... 4 二、配置200服务器... 4 三、创建dblink. 4 DM与Oracle数据库创建dblink. 5 一、DM服务器&#xff1a;... 6 1、初始…

《精通特征工程》学习笔记(3):特征缩放的效果-从词袋到tf-idf

1.TF-IDF原理 tf-idf 是在词袋方法基础上的一种简单扩展&#xff0c;它表示词频 - 逆文档频率。tf-idf 计算的不是数据集中每个单词在每个文档中的原本计数&#xff0c;而是一个归一化的计数&#xff0c;其中每个单词的计数要除以这个单词出现在其中的文档数量。 词袋bow(w, …

蒙特卡洛及其衍生

这些方法都依赖于我们知道输入和输出&#xff0c;但只是不知道这个映射 f f f。很多时候需要计算关于 f f f的积分&#xff0c;逐个带点显然太费劲了。 蒙特卡罗抽样方法 假设我们要求积分 h ( θ ) ∫ E h ( θ ) π ( θ ∣ x ) d θ h(\theta)\int_E h(\theta)\pi(\theta…

什么是IT服务请求管理

什么是服务请求 用户每天都会提出各种 IT 请求。它可能是对新软件的请求、旧硬件的更换、对应用程序的访问或资产组件的更改。这些请求被归类为服务请求。 服务请求是向 IT 团队发出的请求&#xff0c;以满足最终用户的需求。理想情况下&#xff0c;请求是从服务请求目录中选择…