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. Hexo、主题、部署上线

    Hexo.主题.部署上线 安装Hexo git和nodejs安装好后,就可以安装hexo了,你可以先创建一个文件夹MyBlog,用来存放自己的博客文件,然后cd到这个文件夹下(或者在这个文件夹下直接右 ...

  2. ubuntu+将主机编译的库链接到虚拟环境Python中

    这里且以opencv为例: cd ~/.virtualenvs/YOUR_ENV/lib/python3.5/site-packages/ ln -s /usr/local/lib/python3.5 ...

  3. Apple Screen Recorder All In One

    Apple Screen Recorder All In One Apple macOS 自带录屏 QuickTime Player https://support.apple.com/zh-cn/g ...

  4. Nginx环境下,PHP下载,中文文件,下载失效(英文可以下载)怎么解决呢?

    参考出处: http://www.imooc.com/qadetail/76393 Nginx环境下,PHP下载,中文文件,下载失效(英文可以下载)怎么解决呢? 背景介绍: 文件名  为英文时可以下载 ...

  5. 英语能力考试 All In One

    英语能力考试 All In One 托福,雅思,托业 TOEIC 托业考试 Test of English for International Communication (TOEIC) 国际交流英语 ...

  6. 如何通过 terminal 查看一个文件的 meta信息

    如何通过 terminal 查看一个文件的 meta 信息 Linux shell stat 查看文件 meta 信息 stat stat指令:文件/文件系统的详细信息显示: 使用格式:stat 文件 ...

  7. .bashrc & rename hostname & rename username

    .bashrc & rename hostname & rename username mbp $ pwd $ cd ~ $ pwd $ cat .bashrc $ vim .bash ...

  8. flutter & dart & vs code & bug

    flutter & dart & vs code & bug Waiting for another flutter command to release the startu ...

  9. react slot component with args

    react slot component with args how to pass args to react props child component https://codesandbox.i ...

  10. js异步回调Async/Await与Promise区别 新学习使用Async/Await

    Promise,我们了解到promise是ES6为解决异步回调而生,避免出现这种回调地狱,那么为何又需要Async/Await呢?你是不是和我一样对Async/Await感兴趣以及想知道如何使用,下面 ...