共计 1923 个字符,预计需要花费 5 分钟才能阅读完成。
脚手架 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} from "mobx";
import {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';}
}
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(
<React.StrictMode>
<Provider store = {store}>
<App />
</Provider>
</React.StrictMode>,
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 (
<div>
{authStore.name}/
{testStore.name}/
{authStore.titleName}
<br />
<button onClick = {() => {authStore.setName(new Date().getTime());
} }> 点击按钮触发 action</button>
</div>
);
}
}
export default Index;
正文完