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 一 ...
随机推荐
- Unity multiplayer
using UnityEngine; using System.Collections; public class multiplayer_Button : MonoBehaviour { void ...
- 智课雅思词汇---六、fer是什么意思
智课雅思词汇---六.fer是什么意思 一.总结 一句话总结:词根:fer = to carry(拿), to bring(带来), to bear(负担, 1.equ是什么意思? 词根:-equ- ...
- 【Linux】JDK+Eclipse 搭建C/C++开发环境
注:本文所提供的参考示例是在CentOS Linux环境下的安装,不保证适用于其他版本的Linux系统. · 安装前的注意事项 编译源代码是需要对应的代码编译工具的,本文中安装的Eclipse只 ...
- Shiro架构及其组件
Shiro可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等.这不就是我们想要的嘛,而且Shiro的API也是非常简单:其基本功能点如下图所示: Authentication:身份认证 ...
- HUE配置文件hue.ini 的filebrowser模块详解(图文详解)(分HA集群和非HA集群)
不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...
- Linux 终端仿真程序Putty
PuTTY是一个Telnet.SSH.rlogin.纯TCP以及串行接口连接软件.较早的版本仅支持Windows平台,现在的版本中开始支持各类Unix平台. 用linux作为桌面系统,身为工程师很多时 ...
- WP8 学习笔记(001_环境配置)
Step 1 WP8 的开发要求64位操作系统,Windows 8及以上版本,需要激活版,建议网上买一个注册码.详见安装双系统. Step 2 安装好系统并已经激活之后,需要安装Windows Ph ...
- LINQ to SQL活学活用(1):这要打破旧观念
程序架构 如今比較经典的架构,看看以下图片. 怎样实现 在一个N层应用程序中我们怎样使用LINQ to SQL呢?这给刚刚入门的朋友的确是个难题,使用LINQ to SQL就是ORM技术,能够非常轻松 ...
- Codeforces Beta Round #2 C. Commentator problem
模拟退火果然是一个非常高端的东西,思路神马的全然搞不懂啊~ 题目大意: 给出三个圆,求一点到这三个圆的两切线的夹角相等. 解题思路: 对于这个题来说还是有多种思路的 .只是都搞不明确~~ /害羞脸 ...
- js---07 js预解析,作用域---闭包
js解析器首先不会逐行读代码,这是第二部了. 首先 根据var找到变量,根据function找函数,找到变量var a = 1,js解析器只会读取等号前面的var a,并把a设置值未定义,并不会读取等 ...