# mobx
# 安装
运行 npm run eject
如果运行报错执行以下命令: git init git add . git commit -m'update' 执行完之后在执行 npm run eject
npm install mobx --save
mobx-react (这个是用来连接 mobx 和 react 的)
npm i @babel/plugin-proposal-decorators -D
npm i @babel/plugin-proposal-class-properties -D
安装完之后需要进行在 package.json 中进行配置
"babel": {
"plugins": [
[
"@babel/plugin-proposal-decorators",
{
"legacy": true
}
],
[
"@babel/plugin-proposal-class-properties",
{
"loose": true
}
]
],
"presets": [
"react-app"
]
},
"eslintConfig": {
"parserOptions": {
"ecmaFeatures": {
"legacyDecorators": true
}
},
"extends": [
"react-app",
"react-app/jest"
]
},
本人用的 HBuilderX 编辑器开发
// inject 注入的意思 // observer 把注入进来的 store 进行观察,如果全局变量发生改变,页面就会发生变化
# react Class 组件写法
import React, { Component } from "react";
import { inject, observer } from "mobx-react";
@inject("store")
@observer
class Text extends Component {
constructor(props) {
super(props);
this.state = {};
}
render() {
let { store } = this.props;
return <div>{store.o}</div>;
}
}
export default Text;
# 不用修饰器方式的 class 组件写法
import React, { Component } from "react";
import { inject, } from "mobx-react";
class Text extends Component {
constructor(props) {
super(props);
this.state = {};
}
render() {
let { store } = this.props;
return <div>{store.o}</div>;
}
}
export default inject('store)(observer(Text));
# 函数组件写法
import React from "react";
import { inject, observer } from "mobx-react";
const Text = (props) => {
let { o } = props.store;
return <div>{o}</div>;
};
export default inject("store")(observer(Text));
函数组件写法 https://segmentfault.com/a/1190000025143572
补充:
这个我觉得没有必要,因为修饰器属于侵入式,inject、observer 属于高阶组件,直接使用入参控制就可以了,而类组件的话就需要外部的入侵