基于create-react-app 2.0构建前端框架 新手必会

开箱即用,容易理解,更适合小白使用开发学习

mobx 简介

和 redux 类似,mobx 是一个数据管理库,都可以和 react 配合使用。它区别于 redux 的最大特点是,可以直接修改数据,对 UI 进行精确刷新

使用 mobx 时,借鉴了 redux 架构的优点:
  • 单一数据源,这样避免了子组件、父组件状态同步的问题
  • 可以做到让组件无状态化
  • 使用 Provider 注入,让 store actions 可以在子组件中,通过 props 访问使用
下面是一些不同点:
  • mobx 使用的是 @inject 装饰器语法注入,redux 使用的是 connect 语法注入
  • mobx 使用 @observer 语法,让一个 component 能响应 store 字段更新
  • mobx 会动态精确绑定数据字段和对应 component 关系, redux 使用 connect 参数手动控制传递哪些字段
  • mobx 直接修改 store 的状态,但是必须在 @action 修饰的函数中完成,@action 的语义,表示这是一个修改状态的操作
  • redux Provider 传递 store 是强约定,mobx Provider 灵活传递 store actions,也可以是其它名字,比如 db
  • redux 使用了比较难以理解的高阶函数和参数 connect combineReducers bindActionCreators mapStateToProps mapDispatchToProps ,mobx 方案,除了使用 decorator 语法,没有其它让人感觉理解困难的函数。
  • redux 引入了数据流,mobx 没有数据流的概念,通过 actions 直接改变数据
编码工作量对比

代码功能少,感觉不到差别,好像就是 redux 方案有点难理解;而 mobx 比较直接,也比较 magic,就像当年刚开始使用 jQuery 的感觉。

mobx 在大项目中的扩展能力

redux 方案,本质上还是通过添加更多的 switch 语句来实现扩展,将 store 分支节点的 reducer 分散到不同的文件,再通过工具函数combineReducers 合并成一个 rootReducer

mobx 方案的扩展非常简单,需要扩展 storeactions。并且,actionsstore 的扩展方式完全一致,通过给父类添加成员

下载地址:
https://github.com/wulibaibao/react-antd-demo

已支持:

  • mobx ———— mobx进行状态管理
  • React-router-dom ———— React路由体系
  • Antd ———— 使用antd学习开发后台管理系统
  • React-loadable ———— import()动态加载的支持
  • webpack打包优化 ———— build包更小
  • fetch ———— 数据请求
  • Scss ———— css 预处理
  • 登录验证
  • 支持装载ES7(装饰器)
  • Express
  • Webpack 4.0
  • create-react-app 2.0

即将支持:

  • IE兼容
  • 接口
  • nginx
  • gzip
  • typescript

快速开始

install

yarn install or npm install

建议使用yarn

npm install yarn -g

start

yarn start

默认端口:3000
修改默认端口
方法一
"start":"set PORT=3535 && node scripts/start.js"
方法二
/*
自行安装包 yarn add cross-env
*/
"start":"cross-env PORT node scripts/start.js"

webpack proxy

转发配置package.json中的proxy

yarn start

build

yarn build

具体修改点:

webpack.config.dev.js && webpack.config.prod.js
  • 新增方法
 + function resolve (dir) {
 +     return path.join(__dirname, '..', dir)
 + }
  • resolve -> alias 新增
 + '@':resolve('src'),

webpack.config.prod
  • externals
    externals 配置选项提供了「从输出的 bundle 中排除依赖」的方法。
 + externals: {
 +    'react': 'React',
 +    'react-dom': 'ReactDOM',
 +    'mobx' : 'mobx',
 +    'react-router-dom':'ReactRouterDOM',
 +    'mobx-react':'mobxReact',
 +    'moment':'moment',
 +    'antd' : 'antd',
 + },
  • devtool
    此选项控制是否生成,以及如何生成 source map。
 - devtool: shouldUseSourceMap ? 'source-map' : false,
 + devtool: false 
package.json -> proxy

如果你有单独的后端开发服务器 API,并且希望在同域名下发送 API 请求 ,那么代理某些 URL 会很有用

 + "proxy":{}
public -> index.html

HtmlWebpackPlugin 你可以让插件为你生成一个HTML文件,使用lodash模板提供你自己的模板,或使用你自己的loader。

 + <%if(process.env.NODE_ENV === 'production') {%>
 +    <script src="%PUBLIC_URL%/lib/react.production.min.js"></script>
 +    <script src="%PUBLIC_URL%/lib/react-dom.production.min.js"></script>
 +    <script src="%PUBLIC_URL%/lib/react-router-dom.min.js"></script>
 +    <script src="%PUBLIC_URL%/lib/mobx.umd.min.js"></script>
 +    <script src="%PUBLIC_URL%/lib/mobx-react.min.js"></script>
 +    <script src="%PUBLIC_URL%/lib/moment.min.js"></script>
 +    <script src="%PUBLIC_URL%/lib/antd.min.js"></script>
 + <%}%>
app.js
    const path = require('path')
    const express = require('express')

    var app = express()

    // 静态文件资源,做静态文件服务器,js、css、html资源等
    const projPath = process.cwd()
    // js,css资源
    app.use( `/` , express.static( path.join(projPath, 'build') ) )

    app.get( `*` , ( req , res ) => res.sendFile(path.join(__dirname, 'build', 'index.html')) )

    // 修改侦听服务器端口
    const port = 2001
    app.listen(port)
    console.info(`Listen on Port ${port}`)

over!

希望喜欢


喜欢请关注个人博客!

blog address : https://www.wulibaibao.com/

简书地址:

https://www.jianshu.com/u/bc0ac5b86f32

联系我!
QQ :381477703

mobx介绍部分引文: http://imweb.io/topic/59f4833db72024f03c7f49b4

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容