1.初始化项目

第一步用create-react-app初始化一个项目,并打开webpack配置项

npx create-react-app react-mobx-demo

cd react-mobx-demo

npm run eject 

2.配置支持修饰符

目前初始化的项目是不支持修饰符的,安装相关依赖

cnpm install --save-dev @babel/plugin-proposal-decorators
cnpm install --save-dev @babel/plugin-proposal-class-properties

上面安装好之后,找到项目中package.json文件修改如下

"babel": {
// 新增
"plugins": [
[
"@babel/plugin-proposal-decorators",
{
"legacy": true
}
],
[
"@babel/plugin-proposal-class-properties",
{
"loose": true
}
]
],
"presets": [
"react-app"
]
},

找到babel添加plugins就可以了’

3.安装antd和mobx

这一步没有什么特别,安装就行

yarn add antd
yarn add mobx
yarn add mobx-react


4.开发stroe,完整的代码
import {action, computed, observable} from "mobx";
import moment from 'moment';
class Appstore { @observable time ="2020";
@observable todos=[]; @action add(n){
this.todos.push(n)
};
@action del(){
this.todos.pop()
};
@action reset(){
this.todos=[]
};
@action getNOW(){
this.time=moment().format('YYYY-MM-DD HH:mm:ss')
}
@computed get desc(){
return `${this.time} 还有 ${this.todos.length}任务没有完成`;
}
} const zero= new Appstore ();
setInterval(()=>{
zero.getNOW();
},1000)
export default zero;

  5.开发HomePage 组件

import React, {Component} from 'react';
import {inject, observer} from "mobx-react"; @inject('zero') @observer
class PageHome extends Component {
constructor(props){
super(props);
this.state={ } }
handerBtn(type){
let {zero} =this.props;
switch (type) {
case 'add':
zero.add("新加数据");
break;
case 'del':
zero.del();
break;
case 'reset':
zero.reset();
break;
default: }
}
render() {
let {zero} =this.props;
return (
<div className='home'>
<h1>在React中使用MOBX</h1>
<div> {zero.desc}</div>
<button onClick={this.handerBtn.bind(this,'add')}>添加</button>
<button onClick={this.handerBtn.bind(this,'del')}>删除</button>
<button onClick={this.handerBtn.bind(this,'reset')}>重置</button>
<div> {
zero.todos.map((ele,index,arr)=>{
return(
<div key={index}>
{ele}
</div>
)
}) }
</div>
</div>
);
}
} export default PageHome;

6.Index.js 组件

import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import 'antd/dist/antd.css'
import { Provider } from 'mobx-react'
import store from './mobx'
import zero from './mobx/zero'
import Home from './PageHome'
ReactDOM.render(
<Provider store={store}>
<App/>
<Home zero={zero} ></Home>
</Provider>, document.getElementById('root'))


参考文章

https://zhuanlan.zhihu.com/p/150825843?from_voters_page=true

https://blog.csdn.net/qq_36380426/article/details/102738902

https://cn.mobx.js.org/

https://zhuanlan.zhihu.com/p/138820812

mobx 的学习的更多相关文章

  1. mobx是什么?有什么优点?

    mobx是一个简单可扩展的状态管理库. mobx vs redux mobx是学习成本更低,性能更好的状态解决方案. mobx开发难度低: mobx代码量少: mobx渲染性能好: mobx参考

  2. mobx学习笔记01——什么是mobx?

    mobx是什么? js框架 官方定义:Simple,scalable state management(简单.可扩展的状态管理) mobx与redux相比: 语义丰富.响应式编程,开发难度低.学习成本 ...

  3. MobX 学习

    资源汇集帖: https://github.com/mobxjs/awesome-mobx/blob/master/README-CN.md 中文文档: http://cn.mobx.js.org/ ...

  4. 学习一些和redux一样作用的mobx知识

    两个组件:mobx和mobx-react 英文文档:https://mobx.js.org/refguide/object.html 中文文档:https://cn.mobx.js.org/ 样例:h ...

  5. mobx 学习笔记

    Mobx 笔记 Mobx 三板斧,observable.observer.action. observable: 通过 observable(state) 定义组件的状态,包装后的状态是一个可观察数据 ...

  6. mobx学习笔记04——mobx常用api

    1 可观察的数据(observable) observable是一种让数据的变化可以被观察的方法. 那些数据可被观察? -原始类型 String.Number.Boolean.Symbol -对象 - ...

  7. AntDesign(React)学习-11 使用mobx

    mobx 是由 Mendix.Coinbase.Facebook 开源和众多个人赞助商所赞助的. mobx和redux类似,也可以用来进行状态管理,并且更简单,更灵活.初次研究,先实现一个最简单的功能 ...

  8. mobx学习笔记03——mobx基础语法(decorator修饰器)

    在声明阶段实现类与类成员注解的一种语法. function log(target){ const desc = Object.getOwnPropertyDescriotors(target.prot ...

  9. mobx学习笔记02——mobx基础语法(class)

    新的语法可能不被浏览器支持,可以使用babel转换为浏览器支持的代码格式: 为什么要定义class? js是一门面向对象的编程语言.需要利用类来复用代码,提高编程效率. 需要什么样的class能力? ...

随机推荐

  1. hdu 5874

    On an isolated island, lived some dwarves. A king (not a dwarf) ruled the island and the seas nearby ...

  2. 易漏的PEP8语法规范

    import后定义函数的话, 两个空白行. 函数参数内'='左右不加空格. 在写函数说明时, 三引号得是三个双引号.

  3. React Hooks: useCallback All In One

    React Hooks: useCallback All In One useCallback https://reactjs.org/docs/hooks-reference.html#usecal ...

  4. convert number or string to ASCII in js

    convert number or string to ASCII in js ASCII dictionary generator // const dict = `abcdefghijklmnop ...

  5. google advanced search operators

    google advanced search operators https://www.google.com/advanced_search js es6 site:xgqfrms.xyz http ...

  6. Chrome DevTools & Slow 3G Network

    Chrome DevTools & Slow 3G Network shortcuts https://developers.google.com/web/tools/chrome-devto ...

  7. 详解稳定币圣杯USDN

    稳定币飞速发展,USDN 一骑绝尘,但因合规问题饱受质疑.合规稳定币作为后来者,奋起直追,亦光耀夺目.而更符合区块链精神的稳定币(抵押其他资产生成稳定币),长期以来只有 Maker 的 DAI 能够在 ...

  8. django学习-20.python3中的特殊方法【__str__】的作用

    目录结构 1.前言 2.[__str__]特殊方法的具体使用 2.1.当使用print打印一个类被实例化后生成的对象的时候,若类里有定义了[__str__]特殊方法,是打印出这样的数据:[__str_ ...

  9. postman功能介绍

  10. Eclipse和MyEclipse光标变成黑色块解决办法

    今天偶然发现了一个小技巧,O(∩_∩)O~暂且可以这样说吧,我认为喽. 以前经常在编写程序是不知到碰到键盘上的那个键了,或是那几个组合键了,使得Eclipse里的代码光标变成一个黑色块:在这个状态下, ...