一. 安装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项目流程代码的更多相关文章

  1. MVC项目创建与项目结构介绍

    一.创建MVC项目 打开VS202,点击:文件—>新建—>项目—>Web—>Asp.Net MVC 4 Web应用程序 填好项目名称.解决方案名称和文件存放位置,然后点击确定, ...

  2. Eclipse apk项目创建和项目构架

    一.创建项目工程 设定名字 设定包名(每一台机器只有唯一的包名)下一步 根据设置进行选择 创建空项目 Finish即可创建 调节项目的字体 二.Eclipse 项目构架 Src 2. Gen R.ja ...

  3. Angular—入门环境,项目创建,导入项目

    1.安装 nodejs,npm nodejs 下载地址: https://nodejs.org/en/download/

  4. 用Eclipse+ADT创建可运行项目,创建lib项目,引用一个lib项目

    Managing Projects from Eclipse with ADT In this document Creating an Android Project  创建可运行项目 Settin ...

  5. IDEA-servlet项目创建web项目

    准备:1. 安装jdk1.82. 安装tomcat9.0(idea只支持4.0  9.0的服务器) 一.创建并设置javaweb工程 1.创建javaweb工程File --> New --&g ...

  6. 从“空项目”创建MFC项目遇到的问题error C1189,error MSB8031

    在VS2013中创建了一个空项目,创建了MyApp.h, MyApp.cpp(MyApp.h使用了<afxwin.h>) build的时候报错: fatal error C1189: #e ...

  7. 关于eclipse项目创建maven项目目录不正常的解决方案

    最近学习ssh和maven,遇到了很多问题····首先一个很基础的问题就是我搭建的maven项目目录和教程上的不一样.我的目录之前是这样的: 而教程里的是这样的========> 因为是跟着视频 ...

  8. Git--09 创建Maven项目

    目录 1. 创建Maven项目 2.创建Maven私服nexus 01. 部署Maven 02. 编译测试 03. 部署Tomcat及数据库 04. 创建一个jeesns项目 05. Jenkins创 ...

  9. 使用idea创建springboot项目并打成war包发布到weblogic上

    部署tomcat也是类似的,但是需要注意项目配置的路径,或者直接将项目放到webapp的ROOT目录下. 使用工具:intelliJ IDEA2016.3, jdk1.8 ,weblogic12 一 ...

随机推荐

  1. Swift的闭包,枚举,类和结构体

    闭包(Closures) 使用过其它语言的应该对代码块并不陌生,Swift中的闭包与C,OC中的Block相似. 表示自包括的函数代码块.能够在代码中传递和使用. 而且能够捕获和存储上下文的变量以及常 ...

  2. uestc 94(区间更新)

    题意:有一个字符串全部由'('和')'组成.然后有三种操作,query a b输出区间[a,b]字符串的括号序列是否合法.reverse a b把区间[a,b]字符串里全部'('替换成')',而且把全 ...

  3. CentOS 与Ubuntu 安装软件包的对比

    工作需要开始转向centos,简单记录软件包安装 wget不是安装方式 他是一种下载软件类似与迅雷 如果要下载一个软件 我们可以直接 wget 下载地址 ap-get是ubuntu下的一个软件安装方式 ...

  4. Windows环境下VMware虚拟机的自启动与自动关机--命令行操作

    .设置开机免密登录系统 1. 按下Windows + R 组合键,输入“netplwiz”,点击回车. 2. 去除需要密码登录的勾. 3. 如果需要密码,输入密码,点击确认.   二.编辑vmware ...

  5. ES6学习笔记(四)数值的扩展

    1.二进制和八进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. 0b111110111 === 503 // true 0o767 === 503 ...

  6. 【搭建Saltstack运维工具】

    目录 所谓Salt 开始搭建 配置接受密钥 salt命令 YAML详解 目标定位字符串 state模块定义主机状态 Salt采集静态信息之GrainsSalt @(Saltstack) *** 所谓S ...

  7. 【Django】模板系统

    目录 一.变量 二.过滤器 Filters 2. length 3. filesizeformat 4. slice 5. add 6. first.last 7. join 8. truncatec ...

  8. modelForm所遇问题

    1. 通过modelForm创建表单所遇问题 id 在modelForm中无法创建使用 因为它是django的设置,自增的字段,而不是模型中所设置的字段. 当关联外键时,创建多选的下拉框时,需要注意此 ...

  9. 学习——HTML5

    HTML5多用于手机页面制作,因为PC版浏览器大多不兼容,可以通过下面网站查看HTML5浏览器兼容情况: http://www.caniuse.com/#index 一.语义化标签 1.<hea ...

  10. Python 查找Twitter中特定话题中最流行的10个转发Tweet

    CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-4 @author: guaguastd @name: fi ...