react-mobx6使用案例
?
脚手架 create-react-app
一、安装
//npm yarn 随需求,尽量不要混用,混用有些资源可能会出现掉包
yarn add mobx
yarn add mobx-react// 版本号
"mobx": "^6.3.2",
"mobx-react": "^7.2.0",
二、配置package.json
1.把隐藏的webpack暴露出来,释放之前记得请先提交代码 git commit 一次
yarn run eject
2.安装@babel/plugin-proposal-decorators 插件 必须的
yarn add @babel/plugin-proposal-decorators
3.修改添加 package.json配置 (手动)
"babel": {
"plugins": [
["@babel/plugin-proposal-decorators", {"legacy": true}]
],
"presets": [
"react-app"
]
}
三、定义mobx的store
1.目录机构(mobx支持多个多个状态模块)
stores
----- auth.js 模块1
----- test.js 模块2
----- index.js 总入口
文章图片
2.模块 auth.js
// auth.js和test.js 一模一样 展示auth.js做案例
// @action.bound 和@action 区别 https://cn.mobx.js.org/refguide/action.html
import { observable, action, computed, makeObservable } from "mobx";
export class AuthStore {
// 定义变量
@observable name = 'zhangsan000';
@observable sex ='男';
@observable userObj = {
name: 'zhangsan000',
age: 233,
token: '12345689'
}// 初始化
constructor() {
// mobx6版本以后 必须得在初始化加makeObservable
makeObservable(this);
}// 动作(bound 可以自动绑定this 防止this 指向改变)
@action.bound
setName(v) {
console.log('触发action');
this.name = v;
}
@action
setUserObj(obj) {
this.userObj = obj;
}// 计算属性
@computed get titleName(){
return this.name+'___111';
}}
【react-mobx6使用案例】3.定义导出出口index.js
import { AuthStore } from "./auth";
import { TestStore } from "./test";
export const store = {
authStore: new AuthStore(),
testStore: new TestStore()
};
4.在react 工程入口 导入
import { store } from'./store/index';
import { Provider} from 'mobx-react';
ReactDOM.render(
,
document.getElementById('root')
);
四、在页面中使用mobx,并且通过action 改变mobx
import React, { Component, PureComponent } from "react";
import { observer, inject } from 'mobx-react';
@inject( 'store')
@observer
class Index extends PureComponent {constructor(props) {
super(props);
console.log(this.props);
this.state = {};
}
render() {
const { authStore, testStore } = this.props.store;
return ({authStore.name}/{testStore.name}/{authStore.titleName}
);
}
}export default Index;
?
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件
- android|android studio中ndk的使用
- 使用协程爬取网页,计算网页数据大小