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 一 ...
随机推荐
- storm 消息确认机制及可靠性
worker进程死掉 在一个节点 kill work进程 比方 kill 2509 对work没有影响 由于会在其它节点又一次启动进程运行topology任务 supervisor进程死掉 supe ...
- 【iOS开发-34】自己主动释放池@autoreleasepool的使用注意事项以及ARC机制——面试必考内容
自己主动释放池@autorelease面试频率可能会吧release还要高. (1)在自己主动释放池@autoreleasepool{}中alloc一个对象后(如p1).仍然须要用[p1 autore ...
- HTML5学习笔记简明版(11):新增的API
HTMLDocument上的扩展 HTML5在DOM Level 2 HTML上扩展了一些HTMLDocument的接口.这些接口在全部实现了Document接口的元素对象上进行了实现. HTML5在 ...
- HDOJ 5098 Smart Software Installer 拓扑排序
拓扑排序: 两个队列,一个放不须要重新启动入度为0的,一个放须要重新启动入度为0的....从不须要重新启动的队列開始,每弹出一个数就更新下入度,遇到入读为0的就增加到对应队列里,当队列空时,记录重新启 ...
- Python(七) 高级部分:面向对象
一.类的定义 # 面向对象 #有意义的面向对象代码 # 类 = 面向对象 # 类.对象 #实例化 # 类最基本的作用:封装 class Student(): name = '' age = 0 def ...
- PowerDesigner删除外键关系,而不删除外键列[转] 及编码格式
PowerDesigner删除外键关系,而不删除外键列[转] 数据库 database -> generate database ->format 设置为utf-8 PowerDesi ...
- JS jQuery查看系统中安装的字体
1.下载插件:FontDetect插件 地址:http://www.lalit.org/lab/javascript-css-font-detect/ 或者复制以下代码到fontdetect.js: ...
- WMI获取进程CPU占用率
Monitor % Process CPU Usage (specific process) http://www.tek-tips.com/viewthread.cfm?qid=395765 for ...
- java之 ------ 几种常见的简单设计模式
前言: 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.用于解决特定环境下.反复出现的特定问题的解决方式.使用设计模式是为了可重用代码.让代 ...
- 利用gradle加入构建版本
在java的程序中,貌似都没有这个构建版本的概念.用的诸如eclipse. idea和android studio的IDE也没有直接提供构建版本的选项.只是我却想在android程序的版本其中加入一个 ...