mobx项目创建 + mobx项目流程代码
一. 安装mobx
1. react 安装并 reject抽离配置
1. 全局安装 create-react-app 这个脚手架
npm/cnpm i create-react-app -g
yarn add create-react-app global
2. 创建项目
create-react-app project //自定义的名称不能是project 或 .
3. cd project
4. 进行配置文件抽离(要使用默认的yarn命令)
yarn eject
2. mobx配置(配置装饰器)
a. 安装mobx,mobx-react
cnpm i mobx mobx-react -D
注意:如果git冲突
git add . //原操作先放到本地暂存盘
git commit -m "a"
不要git push
注意:如果git冲突的解决方法
git add . //原操作先放到本地暂存盘
git commit -m "a"
//不要git push
b. 配置装饰器(es6修饰器)
cnpm install babel-plugin-transform-decorators-legacy -D
//装饰器的检测
cnpm i @babel/plugin-proposal-decorators -D
//es6,es7语法检测
cnpm i @babel/preset-env -D
cnpm i babel-plugin-transform-class-properties -D
c. 配置package.json
package.json中的babel配置如下
"babel": {
"plugins": [
[
"@babel/plugin-proposal-decorators",
{
"legacy": true
}
],
"transform-class-properties"
],
"presets": [
"react-app",
"@babel/preset-env"
]
},
二、mobx项目流程
码云源码:mobx项目
项目目录:

1. 数据仓库store中 store.js
//接收的是实例
import home from "./home"
import car from "./car"
const store = {
home,
car
}
export default store
2. store中的数据分片(数据包)car.js
fetch数据请求可以直接写在类中,而不用像redux一样配置redux-thunk
import {
observable,computed,action
} from "mobx"
class Car {
@observable //观察数据name,响应observer
age = 1
@computed //当age发生改变是,触发函数
get douleAge(){
//此this值得是class类的实例
return this.age + 2
}
@action //用户操作,action唯一可以更改state。数据请求直接在action中书写
add(){
//数据更改
this.props.store.car.age ++
//数据请求
fetch("/data/data.json")
.then(res=>res.json())
.then(result=> console.log(result))
.catch(err=> console.log(err)
)
}
}
export default new Car();
3. store中的数据分片 --home.js
import {
observable,computed,action
} from "mobx"
class Home {
@observable
name = "ja"
@computed
get otherName(){
return this.name + "good"
}
@action
add(){
console.log("add",this)
this.props.store.home.name = "newa"
}
}
const home = new Home()
export default home;
4. index.js -根目录注册store,全局组件都可以访问到仓库store
全局组件绑定store,共享store
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import store from "./store"
import {Provider} from "mobx-react"
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root'));
5.组件中注入store数据, 原则:谁使用谁注入inject
import React, { Component } from 'react';
//inject注入:store数据/依赖 注入到组件
import {inject,observer} from "mobx-react"
@inject("store")
//响应observable,state值变化,视图中的observable 及computed数据会同步变化
@observer
class App extends Component {
render() {
let {store} = this.props
console.log(this)
return (
<div className="App">
home数据: {store.home.name}
<hr/>
home-computed后数据: {store.home.otherName}
<hr/>
<button onClick={store.home.add.bind(this)}>更改home数据</button>
<hr/>
car数据: {store.car.age}
<hr/>
car-computed后数据: {store.car.douleAge}
<hr/>
<button onClick={store.car.add.bind(this)}>更改car数据</button>
</div>
);
}
}
export default App;
效果图
当触发action中动作时,@observable以及 @computed 数据会同步更新

mobx项目创建 + mobx项目流程代码的更多相关文章
- MVC项目创建与项目结构介绍
一.创建MVC项目 打开VS202,点击:文件—>新建—>项目—>Web—>Asp.Net MVC 4 Web应用程序 填好项目名称.解决方案名称和文件存放位置,然后点击确定, ...
- Eclipse apk项目创建和项目构架
一.创建项目工程 设定名字 设定包名(每一台机器只有唯一的包名)下一步 根据设置进行选择 创建空项目 Finish即可创建 调节项目的字体 二.Eclipse 项目构架 Src 2. Gen R.ja ...
- Angular—入门环境,项目创建,导入项目
1.安装 nodejs,npm nodejs 下载地址: https://nodejs.org/en/download/
- 用Eclipse+ADT创建可运行项目,创建lib项目,引用一个lib项目
Managing Projects from Eclipse with ADT In this document Creating an Android Project 创建可运行项目 Settin ...
- IDEA-servlet项目创建web项目
准备:1. 安装jdk1.82. 安装tomcat9.0(idea只支持4.0 9.0的服务器) 一.创建并设置javaweb工程 1.创建javaweb工程File --> New --&g ...
- 从“空项目”创建MFC项目遇到的问题error C1189,error MSB8031
在VS2013中创建了一个空项目,创建了MyApp.h, MyApp.cpp(MyApp.h使用了<afxwin.h>) build的时候报错: fatal error C1189: #e ...
- 关于eclipse项目创建maven项目目录不正常的解决方案
最近学习ssh和maven,遇到了很多问题····首先一个很基础的问题就是我搭建的maven项目目录和教程上的不一样.我的目录之前是这样的: 而教程里的是这样的========> 因为是跟着视频 ...
- Git--09 创建Maven项目
目录 1. 创建Maven项目 2.创建Maven私服nexus 01. 部署Maven 02. 编译测试 03. 部署Tomcat及数据库 04. 创建一个jeesns项目 05. Jenkins创 ...
- 使用idea创建springboot项目并打成war包发布到weblogic上
部署tomcat也是类似的,但是需要注意项目配置的路径,或者直接将项目放到webapp的ROOT目录下. 使用工具:intelliJ IDEA2016.3, jdk1.8 ,weblogic12 一 ...
随机推荐
- Design Pattern Adaptor 适配器设计模式
适配器设计模式是为了要使用一个旧的接口,或许这个接口非常难用,或许是和新的更新的接口不兼容,所以须要设计一个适配器类,然后就能够让新旧的接口都统一. 就是这种一个图: watermark/2/text ...
- 如何调试Blink?
内容 尽管有很多工具和技巧可用于调试Blink,这个文章的重点调试Blink除布局測试之外的feature. 1 介绍 2 Linux 2.1 入门 2.2 启动Debugger 3 实用的工具 3. ...
- webpack03
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Python: PS 滤镜--波浪特效
本文用 Python 实现 PS 滤镜的波浪特效,具体效果可以参考之前的博客 http://blog.csdn.net/matrix_space/article/details/42215221 im ...
- 今天了解了些redis和memcached的知识
提取于http://www.cnblogs.com/wupeiqi/articles/5132791.html 感谢博主 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于Hash ...
- 判断DataGridView滚动条是否滚动到当前已加载的数据行底部
private void dataGridView1_Scroll(object sender, ScrollEventArgs e) { if (e.ScrollOrientation == S ...
- 网站及监控利器 Pandora FMS使用体验
Pandora FMS 是一个 开源的应用程序 ,用来监测网站的各种活动,它可以收到实时的监测报告,并发送到你指定的邮箱,也可以通过e-mail, SMS 发送. 650) this.width=65 ...
- HTTP 与 HTTPS
https就是http和TCP之间有一层SSL层,这一层的实际作用是防止钓鱼和加密. 防止钓鱼通过网站的证书,网站必须有CA证书,证书类似于一个解密的签名. 另外是加密,加密需要一个密钥交换算法,双方 ...
- 分享js中的 sort 另一种用法
// 看上去正常的结果: ['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft']; // apple排 ...
- SQL函数-stuff()
select stuff(列名,开始位置,长度,替代字符串) 用于删除指定长度的字符串,并可以在指定长度的地方插入新的字符: 在指定长度的地方添加新的字符