mobx 的学习
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://zhuanlan.zhihu.com/p/138820812
mobx 的学习的更多相关文章
- mobx是什么?有什么优点?
mobx是一个简单可扩展的状态管理库. mobx vs redux mobx是学习成本更低,性能更好的状态解决方案. mobx开发难度低: mobx代码量少: mobx渲染性能好: mobx参考
- mobx学习笔记01——什么是mobx?
mobx是什么? js框架 官方定义:Simple,scalable state management(简单.可扩展的状态管理) mobx与redux相比: 语义丰富.响应式编程,开发难度低.学习成本 ...
- MobX 学习
资源汇集帖: https://github.com/mobxjs/awesome-mobx/blob/master/README-CN.md 中文文档: http://cn.mobx.js.org/ ...
- 学习一些和redux一样作用的mobx知识
两个组件:mobx和mobx-react 英文文档:https://mobx.js.org/refguide/object.html 中文文档:https://cn.mobx.js.org/ 样例:h ...
- mobx 学习笔记
Mobx 笔记 Mobx 三板斧,observable.observer.action. observable: 通过 observable(state) 定义组件的状态,包装后的状态是一个可观察数据 ...
- mobx学习笔记04——mobx常用api
1 可观察的数据(observable) observable是一种让数据的变化可以被观察的方法. 那些数据可被观察? -原始类型 String.Number.Boolean.Symbol -对象 - ...
- AntDesign(React)学习-11 使用mobx
mobx 是由 Mendix.Coinbase.Facebook 开源和众多个人赞助商所赞助的. mobx和redux类似,也可以用来进行状态管理,并且更简单,更灵活.初次研究,先实现一个最简单的功能 ...
- mobx学习笔记03——mobx基础语法(decorator修饰器)
在声明阶段实现类与类成员注解的一种语法. function log(target){ const desc = Object.getOwnPropertyDescriotors(target.prot ...
- mobx学习笔记02——mobx基础语法(class)
新的语法可能不被浏览器支持,可以使用babel转换为浏览器支持的代码格式: 为什么要定义class? js是一门面向对象的编程语言.需要利用类来复用代码,提高编程效率. 需要什么样的class能力? ...
随机推荐
- hdu 5874
On an isolated island, lived some dwarves. A king (not a dwarf) ruled the island and the seas nearby ...
- 易漏的PEP8语法规范
import后定义函数的话, 两个空白行. 函数参数内'='左右不加空格. 在写函数说明时, 三引号得是三个双引号.
- React Hooks: useCallback All In One
React Hooks: useCallback All In One useCallback https://reactjs.org/docs/hooks-reference.html#usecal ...
- convert number or string to ASCII in js
convert number or string to ASCII in js ASCII dictionary generator // const dict = `abcdefghijklmnop ...
- google advanced search operators
google advanced search operators https://www.google.com/advanced_search js es6 site:xgqfrms.xyz http ...
- Chrome DevTools & Slow 3G Network
Chrome DevTools & Slow 3G Network shortcuts https://developers.google.com/web/tools/chrome-devto ...
- 详解稳定币圣杯USDN
稳定币飞速发展,USDN 一骑绝尘,但因合规问题饱受质疑.合规稳定币作为后来者,奋起直追,亦光耀夺目.而更符合区块链精神的稳定币(抵押其他资产生成稳定币),长期以来只有 Maker 的 DAI 能够在 ...
- django学习-20.python3中的特殊方法【__str__】的作用
目录结构 1.前言 2.[__str__]特殊方法的具体使用 2.1.当使用print打印一个类被实例化后生成的对象的时候,若类里有定义了[__str__]特殊方法,是打印出这样的数据:[__str_ ...
- postman功能介绍
- Eclipse和MyEclipse光标变成黑色块解决办法
今天偶然发现了一个小技巧,O(∩_∩)O~暂且可以这样说吧,我认为喽. 以前经常在编写程序是不知到碰到键盘上的那个键了,或是那几个组合键了,使得Eclipse里的代码光标变成一个黑色块:在这个状态下, ...