webpack 配置react脚手架(五):mobx
1. 配置项。使用mobx,因为语法时es6-next,所以先配置 .babelrc 文件
{
"presets": [
["es2015", { "loose": true }],
"stage-1",//改动了这里
"react"
],
"plugins": ["transform-decorators-legacy", "react-hot-loader/babel"]
//还有这里,transform-decorators-legacy 放在 数组的第一项
}
安装:
npm i transform-decorators-legacy babel-preset-stage-1 -D
npm i mobx-react -S
2. 使用 在store/app-state.js中:
import {
observable,
computed,
autorun,
action,
} from 'mobx'
export class AppState {//方便组件调用的时候 判断props的类型
@observable count = 0; //定义属性值
@observable name = 'jok'
@computed get msg() { //定义计算属性
return `${this.name} say count is ${this.count}`
}
@action.add(){ //定义action 是由组件触发该方法的
this.count + =1;
}
@action.changeName(name){
this.name = name;
}
}
const appState = new AppState();
autorun(()=>{
console.log(appState.msg); //一旦更新appState
})
setInterval(()=>{
appState.add();//实时更新,触发add的action
},1000)
export default appState;
调用方法:首先在 入口文件中,类似于使用 context的传入方式,把外层组件包裹起来:
import React from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter } from 'react-router-dom'
import { Provider } from 'mobx-react'
import { AppContainer } from 'react-hot-loader' // eslint-disable-line import App from './views/App'
import appState from './store/app-state' const root = document.getElementById('root');
// 其实包裹组件的方式,使用的是context
const render = (Component) => {
ReactDOM.hydrate(
<AppContainer>
<Provider appState={appState}>
<BrowserRouter>
<Component />
</BrowserRouter>
</Provider>
</AppContainer>,
root,
)
}
然后在业务组件中使用,由于要用到 props,所以要先安装 props-type: npm i prop-types -S
import React from 'react'
import {
observer,
inject,
} from 'mobx-react'
import PropTypes from 'prop-types'
import { AppState } from '../../store/app-state';
@inject('appState') @observer
// 入口文件中 Provider定义的名字 <Provider appState={appState}> 这里引入什么名字
// @observer 规定是观察者模式,appState的状态发生变化,则对应的这里的数据也发生变化 export default class TopList extends React.Component {
constructor(){
super();
this.changeName = this.changeName.bind(this);
//因为在执行 onChange方法的时候,上下文已经不在组件内部了,所以要加上this指向
}
componentDidMount() {
// do something here
}
changeName(event){
this.props.appState.changeName(event.target.value);
}
render() {
return [
<div>
<input type="text" onChange={this.changeName}/>
<span>{this.props.appState.msg}</span>
</div>
]
}
} TopList.propTypes = {
appState: PropTypes.instanceOf(AppState).isRequired
}
webpack 配置react脚手架(五):mobx的更多相关文章
- webpack 配置react脚手架(六):api
1 访问网址 https://cnodejs.org/api 可以调取api 2.//该body-parser 可以将请求的body数据,转变成 json 格式数据://express-session ...
- webpack 配置react脚手架(三):eslint 及优化
首先谨记 eslint的官网: http://eslint.cn/ 1 安装eslint npm i eslint -D 2.在根目录下新建文件 .eslintrc { "extends ...
- webpack 配置react脚手架(二):热更新
下面继续配置 webpack dev server hot module replacement: 首先配置dev-server 安装 npm i webpack-dev-ser ...
- webpack 配置react脚手架
1 react 基本js文件: import React from 'react'; import ReactDOM from 'react-dom'; import App from './App. ...
- webpack 配置react脚手架(四):路由配置
1. 由于 react-router 是集成了 react-router-dom 和 react-router-native的一起的,所以这里要使用的是 react-router-dom, 2. 安装 ...
- [webpack] 配置react+es6开发环境
写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...
- webpack配置React开发环境(上)
Webpack 是一个前端资源加载/打包工具,我们部门的一条主要技术栈就是Webpack+React+ES6+node,虽然之前自己做个人项目也接触好多次Webpack,但是自己并没有研读总结过Web ...
- 使用webpack配置react并添加到flask应用
学习react,配置是很痛苦的一关,虽然现在有了create-react-app这样方便的工具,但是必须要自己配置一遍,才能更好地进行项目开发. 首先要明确一个概念:react的文件必须经过编译才能被 ...
- 基于webpack的react脚手架
一.前言:react的cli开发模式太过于简单,好多东西都要自己配置 二.这里有个简单的配置,可以直接上手开发(不熟悉webpack和npm的绕路),已经完成的配置如下 1:默认ejs模板 2:编译l ...
随机推荐
- 大师Geoff Hinton关于Deep Neural Networks的建议
大师Geoff Hinton关于Deep Neural Networks的建议 Note: This covers suggestions from Geoff Hinton's talk given ...
- [转帖]理解k8s 的 Ingress
理解k8s 的 Ingress https://www.jianshu.com/p/189fab1845c5/ 暴露一个http服务的方式 service 是 k8s 暴露http服务的默认方式, 其 ...
- [转帖]运维必读:Linux 的内存分页管理
运维必读:Linux 的内存分页管理 https://cloud.tencent.com/developer/article/1356431 内存是计算机的主存储器.内存为进程开辟出进程空间,让进程在 ...
- python gdal安装与简单使用
原文链接:python gdal安装与简单使用 gdal安装方式一:在网址 https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal 下载对应python版本的 ...
- (一)SpringBoot Demo之 Hello World
文章目录 最终效果 pom文件编写 编写资源类 编写控制器 运行项目 原文 : https://spring.io/guides/gs/rest-service/ 类型:官网入门指南 要求:JDK1. ...
- ALV报表——抓取工单长文
ABAP抓取工单长文 运行效果: 代码: *&---------------------------------------------------------------------* *& ...
- Linux权限管理:setUID、setGID 和 Sticky BIT
1.setUID.setGID 和 Sticky BIT 的功能详解 setuid 功能: 1.只有可执行的二进制文件程序才能设定 SUID 权限(前提) 2.命令执行者要对该程序有执行(x)权限(必 ...
- Linux踢出登陆用户的正确姿势
首先who(或w)查看需要杀死的终端名,然后执行: pkill -9 -t pts/? pkill相当于ps和kill的结合,用法和killall类似,根据进程名来杀死一类进程(kill是杀死单个) ...
- Spring Boot学习随记
由于早年在管理领域耕耘了一段时间,完美错过了Spring的活跃期, 多少对这个经典的技术带有一种遗憾的心态在里面的, 从下面的我的生涯手绘图中大概可以看出来我的经历. 最近由于新介入到了工业数字化领域 ...
- VS.NET(C#)--2.9_HTML服务器控件案例
HTML服务区控件案例 UI设计视图 UI源码视图 <>