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 一 ...
随机推荐
- 81.node.js前端html时页面格式错乱解决办法
var http = require("http"); var url = require("url"); var fs = require("fs& ...
- shrio 授权
授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等).在授权中需了解的几个关键对象:主体(Subject).资源(Resource).权限(Permission).角 ...
- HDU 5438 Ponds dfs模拟
2015 ACM/ICPC Asia Regional Changchun Online 题意:n个池塘,删掉度数小于2的池塘,输出池塘数为奇数的连通块的池塘容量之和. 思路:两个dfs模拟就行了 # ...
- 如何更改AD域安全策略-密码必须符合复杂性要求
通常我们在域系统-管理工具上面是找不到“域安全策略”的,我们只能找到“本地安全策略”,而更改“本地安全策略”是不会对域产生任何的作用的.下面这个步骤教你如何找到“域安全策略” 1.Start(开始)– ...
- ttf字体转换成web中使用的woff、svg、eot格式字体
网站地址:http://www.fontsquirrel.com/tools/webfont-generator(还可以缩小字体文件大小,强烈推荐) ttf转换成eot格式的字体软件:EOTFAST. ...
- SQL脚本存在TABLE ACCESS FULL行为
对于SQL的执行计划,一般尽量避免TABLE ACCESS FULL的出现,那怎样去定位,系统里面哪些SQL脚本存在TABLE ACCESS FULL行为,对于9i及以后版本,使用以下语句即可 sel ...
- PatentTips - Virtual translation lookaside buffer
BACKGROUND OF THE INVENTION A conventional virtual-machine monitor (VM monitor) typically runs on a ...
- STL heap部分源代码分析
本文假设你已对堆排序的算法有主要的了解. 要分析stl中heap的源代码的独到之处.最好的办法就是拿普通的代码进行比較.话不多说,先看一段普通的堆排序的代码: //调整大顶堆.使得结构合理 void ...
- mysql_jdbc
package com.lovo.day18_jdbc1; import java.sql.Connection; import java.sql.DriverManager; import java ...
- SQL查询表中的用那些索引
方法1. 使用系统表 -- 查询一个表中的索引及索引列 USE AdventureWorks2008 GO SELECT indexname = a.name , tablename = c. n ...