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 ...
随机推荐
- caffe windows10 vs2015 cuda8.0 ->vs2013
http://blog.csdn.net/xjz18298268521/article/details/52190184 http://www.cnblogs.com/xuanyuyt/p/57269 ...
- JDBC(连接数据库的四个主要步骤)
JDBC连接数据库 ?创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...
- python线程障碍对象Barrier(34)
python线程Barrier俗称障碍对象,也称栅栏,也叫屏障. 一.线程障碍对象Barrier简介 # 导入线程模块 import threading # 障碍对象barrier barrier = ...
- 学习Ajax小结
Ajax 学习 1.ajax的概念 局部刷新技术,不是一门新技术,是多种技术的组合,是浏览器端技术 2.作用 可以实现 ...
- mac install azure-cli
安装 CLI 时,可以先更新 brew 存储库信息,然后运行 install 命令: brew update && brew install azure-cli 更新: brew up ...
- LeetCode 442. 数组中重复的数据(Find All Duplicates in an Array) 17
442. 数组中重复的数据 442. Find All Duplicates in an Array 题目描述 Given an array of integers, 1 ≤ a[i] ≤ n (n ...
- LeetCode 783. 二叉搜索树结点最小距离(Minimum Distance Between BST Nodes)
783. 二叉搜索树结点最小距离 LeetCode783. Minimum Distance Between BST Nodes 题目描述 给定一个二叉搜索树的根结点 root, 返回树中任意两节点的 ...
- 【hash】Power Strings
[题意]: 给出s串出来,能否找到一个前缀 ,通过多次前缀进行拼接.构成s串.如果有多个,请输出最多次数那个. 如:aaaa 可以用1个a,进行4次拼接 可以用2个a,进行2次拼接 可以用4个a,进行 ...
- •C#进阶系列——WebApi接口测试工具:WebApiTestClient
阅读目录 一.WebApiTestClient介绍 二.WebApiTestClient展示 三.WebApiTestClient使用 1.如何引入组件 2.如何使用组件 四.总结 正文 前言:这两天 ...
- Redis 如何与数据库事务保持一致
考虑一个问题,redis 如何 与 数据库保持一致性的问题. 举栗子:如果我们在开发过程中遇到这样的一种情况,我们删除 redis中token 的同时 也需要修改数据库中 储存的 token 的状态为 ...