网站右下角弹窗代码,做公众号关注网站,seo岗位工资,开发流程有哪些阶段mobx的使用
1、API
mobx-react Provider 包裹根组件#xff0c;用于传递数据observer 组件变为响应式inject 接收mobx实例(用于类组件)MobXProviderContext mobx observable 声明变量action 声明函数用于修改observable 的值makeObservable 更新状态
2、安装
yarn add mo…mobx的使用
1、API
mobx-react Provider 包裹根组件用于传递数据observer 组件变为响应式inject 接收mobx实例(用于类组件)MobXProviderContext mobx observable 声明变量action 声明函数用于修改observable 的值makeObservable 更新状态
2、安装
yarn add mobxyarn add mobx-react 使用语法糖需要安装yarn add babel/plugin-proposal-decoratorsyarn add babel/plugin-proposal-class-properties
3、安装之后需要修改package.json文件 presets: [[react-app],[babel/preset-react]],plugins: [[babel/plugin-proposal-decorators, {legacy: true }],[babel/plugin-proposal-class-properties, { loose : true }]]现在就已经可以正常使用mobx了
4、父级入口管理
1、引入mobx-react中的Provider import {Provider} from mobx-react 2、将仓库中的类进行集中管理
const stores {store1 new Store1( ),store2 new Store2( ),……
}3、通过Provider向下传递 Proveder {...stores}/Provider
5、子组件接收类组件、函数组件
类组件 1、从react-router-dom引入withRouter import {withRouter} from react-router-dom; 2、从mobx-react中引入inject和observer 3、使用
withRouter //更新的作用
inject(store1,store2) //接收
observer //组件变为响应式
//这三步会把对应的store挂在props上函数组件 1、从react-router-dom引入withRouter 2、从mobx-react中引入inject和MobXProviderContext 3、使用
//获取mobox实列
//const Store1 React.useContext(MobXProviderContext)[Store1];//简单封装之后
function useStore(name) {return React.useContext(MobXProviderContext)[name]
}
const Store1 useStore(Store1)export default withRouter(observer(componentName))5.0版本
用class类创建仓库
大多使用语法糖
声明变量 observable
声明函数 action 用箭头函数不然解构会失去this
监测更新 makeObservable(this)configure //开启严格模式之后需要用runInAction((){这里写逻辑})
runInAction6.0版本
用makeAutoObservable( )创建对象
不能写箭头函数所以使用方法时不能解构不然会失去this6、 5.0版本案列
目录 srcstore- index.js- num.jsviewsAbout- index.jsxsrc/store/index.js 这个文件主要是引入所有的mobx文件做一个统一的导出 import Num from ./num.js;const stores {num: new Num()
}export default stores;src/store/num.js
import { observable, action, makeObservable } from mobx;class Num {constructor() {//获取thismakeObservable(this)}//声明变量observable num 0;//声明函数actionincrement () {this.num 1}actiondecrement () {this.num - 1}
}export default Numsrc/views/About/index(函数组件写法) withRouter数据更新 MobXProviderContext接收变量observer 数据响应 import React, { Fragment, useEffect } from react;
import { withRouter } from react-router-dom;
import { MobXProviderContext,observer } from mobx-react
const View () {const {num,increment,decrement} React.useContext(MobXProviderContext)[num]useEffect(() {console.log(num)},[])return (Fragmenth2关于页面/h2hr /{num}button onClick{increment}增加1/buttonbutton onClick{decrement}减小1/button/Fragment)
}export default withRouter(observer(View))src/views/About/index(类组件写法) withRouter更新inject接收observer数据响应 inject接收的是store的属性 通过this.props可以拿到值 import React, { Fragment,Component } from react;
import { withRouter } from react-router-dom;
import { inject, observer } from mobx-react;
//这里注意要放在组件之外
withRouter
inject(num)
observer
class View extends Component{componentDidMount() {console.log(this.props.num)}render() {let {num,increment,decrement}this.props.numreturn (Fragmenth2关于页面/h2hr /{num}button onClick{increment}增加1/buttonbutton onClick{decrement}减小1/button/Fragment)}
}export default View