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. 牛客网多校第9场 E Music Game 【思维+数学期望】

    题目:戳这里 题意:鼠标点击n下,第i次点击成功的概率为p[i],连续点击成功x次可以获得x^m分,求n次点击总分数的数学期望. 解题思路:数学期望的题很多都需要转化思维,求某一个单独状态对整体答案的 ...

  2. 一分钟搞懂JavaScript中的JSON对象

    JSON(JavaScript Object Notation)是表示值和对象的通用格式. JavaScript 提供了如下方法: JSON.stringify 将对象转换为 JSON. JSON.p ...

  3. java变量、数据类型、运算符

    关键字.保留字.标识符 关键字 Java关键字是对Java编译器有特殊含义的字符串,是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型.类.方法特性等信息 保留字 goto.co ...

  4. Monorepo All In One

    Monorepo All In One monorepos 只是一种思想,或设计模式,架构风格 https://trunkbaseddevelopment.com/monorepos/ Lerna h ...

  5. XSS (跨站脚本攻击) 的原理分析,测试 && 应对措施

    1 1 1 XSS (跨站脚本攻击) 的原理分析,测试 1 demo: <!DOCTYPE html> <html lang="en"> <head& ...

  6. shit instagram

    shit instagram 无法登录 我们检测到了可疑登录操作 为保护帐户安全,请获取登录帮助. email 无法验证 x*****s@e*****.com xgqfrms@example.com ...

  7. nasm astrset_s函数 x86

    xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...

  8. svg-path-to-polygons & svg-path-parser

    svg-path-to-polygons & svg-path-parser svg-path-to-polygons https://www.npmjs.com/package/svg-pa ...

  9. USDN代币发行 关于USDN代币

    "稳定币"是数字货币的一种,但与主流币存在的差异是,它可以通过锚定法币和加密资产等手段来维持币价的相对稳定.提及稳定币,一般会先介绍三种模式: 法币托管模式.数字资产抵押模式和无抵 ...

  10. [计算机图形学]视图变换:MVP变换、视口变换

    目录 一.MVP变换 1. 模型变换 1.1 缩放矩阵 1.2 旋转矩阵 1.3 平移矩阵 2. 视角变换 3. 投影变换 二.Viewport变换 一.MVP变换 MVP变换是模型变换(M).视角变 ...