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的更多相关文章

  1. webpack 配置react脚手架(六):api

    1 访问网址 https://cnodejs.org/api 可以调取api 2.//该body-parser 可以将请求的body数据,转变成 json 格式数据://express-session ...

  2. webpack 配置react脚手架(三):eslint 及优化

    首先谨记 eslint的官网:  http://eslint.cn/ 1 安装eslint  npm i eslint -D 2.在根目录下新建文件 .eslintrc { "extends ...

  3. webpack 配置react脚手架(二):热更新

    下面继续配置 webpack dev server    hot module replacement: 首先配置dev-server     安装     npm i webpack-dev-ser ...

  4. webpack 配置react脚手架

    1 react 基本js文件: import React from 'react'; import ReactDOM from 'react-dom'; import App from './App. ...

  5. webpack 配置react脚手架(四):路由配置

    1. 由于 react-router 是集成了 react-router-dom 和 react-router-native的一起的,所以这里要使用的是 react-router-dom, 2. 安装 ...

  6. [webpack] 配置react+es6开发环境

    写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...

  7. webpack配置React开发环境(上)

    Webpack 是一个前端资源加载/打包工具,我们部门的一条主要技术栈就是Webpack+React+ES6+node,虽然之前自己做个人项目也接触好多次Webpack,但是自己并没有研读总结过Web ...

  8. 使用webpack配置react并添加到flask应用

    学习react,配置是很痛苦的一关,虽然现在有了create-react-app这样方便的工具,但是必须要自己配置一遍,才能更好地进行项目开发. 首先要明确一个概念:react的文件必须经过编译才能被 ...

  9. 基于webpack的react脚手架

    一.前言:react的cli开发模式太过于简单,好多东西都要自己配置 二.这里有个简单的配置,可以直接上手开发(不熟悉webpack和npm的绕路),已经完成的配置如下 1:默认ejs模板 2:编译l ...

随机推荐

  1. 如何优雅的处理 async/await 异常

    参考链接:https://cloud.tencent.com/developer/article/1470715 参考链接:https://www.jianshu.com/p/2935c0330dd2

  2. ip网络

  3. P1993 小K的农场(差分约束)

    小K的农场 题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b至少多种植了 ...

  4. [转帖]K8s 工程师必懂的 10 种 Ingress 控制器

    K8s 工程师必懂的 10 种 Ingress 控制器 https://www.kubernetes.org.cn/5948.html 控制器有好多啊. 2019-10-18 23:07 中文社区 分 ...

  5. java抽象类及接口

    Java抽象类: 抽象类特点:抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被extends [抽象 ...

  6. C++根据用户输入打印对应的金层塔层数

    #include <iostream> #include <Windows.h> using namespace std; int main(void) { int row; ...

  7. AVR单片机教程——序言

    我一直觉得现在的网络环境对电子技术的学习有一点问题,但始终无法确切地指出,更何况网络上相关资源已经那么丰富. 但我觉得是问题的,无论它到底是不是问题,对我来说总归是一个问题.我学习也不算深入,很多东西 ...

  8. linux 列出本文件下的目录

    `ls /etc` 和$(ls /etc) 是两种获取命令执行结果的方式. for file in List 的语法里面的List 就是使用使用ls /etc 的命令执行结果作为List(https: ...

  9. Linux查询命令帮助信息(知道)

    方法一 command --help 方法二 man command 操作涉及到的按键: 空格键:显示手册的下一屏 Enter键:一次滚动手册的一行 b:回滚一屏 f:前滚一屏 q:退出 结果基本上全 ...

  10. wcf Origin

    WebHttpBinding bd = new WebHttpBinding(); //WebServiceHost sh = new WebServiceHost(typeof(Bl_x), new ...