美文网首页
03、react 使用mobx全局状态管理

03、react 使用mobx全局状态管理

作者: 蜗牛的学习方法 | 来源:发表于2019-01-17 11:32 被阅读0次

1、首先初始化react项目

create-react-app mobxdemo

2、下载mobx插件

yarn add  mobx mobx-react --save

使用mobx需要先安装装饰器插件, 要不然项目会报错
下面是装饰器的安装和配置:

安装babel插件:
Babel >= 7.x
yarn add  @babel/plugin-proposal-decorators --save
babel@6.x
yarn add  babel-plugin-transform-decorators-legacy  --save

修改package.json文件的babel配置项

Babel >= 7.x
{
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }],
  ]
}

babel@6.x
"babel": {
  "plugins": [
    "transform-decorators-legacy"
  ],
  "presets": [
    "react-app"
  ]
},
WX20190117-110142.png

原理这里就简单略过,只讲用法。
3、在项目中新建Mobx文件夹,里面新建一个appStore.js用于存储全局状态和修改的方法action
在最底层 index.js里面配置Provider


WX20190117-112612.png

代码:

//引入mobx插件
import {Provider} from 'mobx-react'
import AppStore from './Mobx/appStore'

ReactDOM.render(
    <Provider store={AppStore}>
        <App />
    </Provider>
, document.getElementById('root'));

在appStore.js里面写入全局状态的state和需要用到的action


WX20190117-112621.png

代码:

//appStore.js
import {observable,action} from 'mobx';

var appStore = observable({
    counter: 0
});
appStore.addCount = action(()=>{
    appStore.counter+=1;
});
appStore.subCount = action(()=>{
    if(appStore.counter<=0){
        return;
    }
    appStore.counter-=1;
});
appStore.changeCount = action((key)=>{
    if(key<=0){
        appStore.counter=0;
    }
    appStore.counter=parseInt(key);
});
export default appStore

在需要用到的页面使用装饰器拿到全局状态的state


WX20190117-112648.png

代码:

//使用
import React, { Component } from 'react';
import {observer, inject} from 'mobx-react';
import './App.css';
//import appStore from './Mobx/appStore';

@inject('store')
@observer
class App extends Component {
  constructor(props){
    super(props);
    this.state={
      count:0
    }
  }
  componentWillMount(){
    const {store}=this.props
    console.log(store)
  }
  addCount=()=>{
    const {store}=this.props
    store.addCount()
    this.setState({

    })
  }
  subCount=()=>{
    const {store}=this.props
    store.subCount()
  }
  changeText(e){
    console.log(e.target.value)
    appStore.changeCount(e.target.value)
  }
  render() {
    let {store}=this.props
    return (
      <div className="App">
        <button onClick={this.subCount}>-</button>
        <input type="text" value={store.counter} onChange={(e)=>this.changeText(e)}/>
        <button onClick={this.addCount}>+</button>
      </div>
    );
  }
}
export default App;

相关文章

  • 03、react 使用mobx全局状态管理

    1、首先初始化react项目 2、下载mobx插件 使用mobx需要先安装装饰器插件, 要不然项目会报错下面是装饰...

  • react-native使用mobx全局状态管理

    1、初始化react-native项目 2、下载mobx 插件 3、配置装饰器插件 4、在项目目录下建一个Mobx...

  • React MobX 开始

    MobX[https://mobx.js.org/] 用于状态管理,简单高效。本文将于 React 上介绍如何开始...

  • React Query 学习 4 与 Redux, MobX 的

    可以看出,React Query 是跟服务器端同步的框架, Redux,MobX 之类的是客户端的全局状态管理。听...

  • Mobx 基本入门

    Mobx, 一个简单、可扩展的状态管理插件, 可结合React, 小程序使用。 这篇文章主要讲一下mobx的基本使...

  • Mobx 使用

    为什么使用mobx? 最近项目中,使用了一种新的状态管理工具—Mobx,Mobx相较于redux之类的数据管理状态...

  • 使用umi+dva做一个demo

    最初只是使用react 进行开发项目,发现项目过大状态管理起来就相当困难,虽然有redux, mobx,但是使用起...

  • react-redux

    redux 全局状态管理 react-redux 优化模块 优化redux的使用过程 通过react-redux ...

  • react native 集成 mobx

    使用的版本: "mobx": "^4.2.1""mobx-react": "^5.1.2""react": "16...

  • React mobx 状态管理

    记录开发中关于mobx使用 问题1: mobx不更新视图,状态更改数据后不触发render发现是版本问题,在mob...

网友评论

      本文标题:03、react 使用mobx全局状态管理

      本文链接:https://www.haomeiwen.com/subject/cpbbdqtx.html