前言

去年11月的时候接手了一个小型的后台系统,负责前端开发,团队经过研究选择了从来没有用过的 Ant Design,作为一门设计语言(什么是设计语言),如果我们此次项目使用 Ant Design 获得收益,我们以后所有的新的 To B 业务 (To B 业务具体指什么)将继续使用这门设计语言。

虽然说 Ant Design 是一门设计语言,但官方给我们提供了一套基于 Ant Design 开发出来的完整的 React UI 组件库,并且提供了一套完整的解决方案。

官方提供了一套 npm + webpack 的解决方案来辅助开发,主要工具也是阿里大神开发的 dva,dva 是一个基于 react 和 redux 的轻量应用框架,具体可参考项目实战。

在去年11月做项目的时候,dva 的版本还是 0.x,时至今日,已经升级到1.x,使用方法也不一样了。

这是本系列的第一篇文章,主要根据 dva 来搭建起目录结构。

dva 简介

可以查看 快速开始

dva 的数据流向

dva 在 v1.0 以后使用了 roadhog 来作为项目脚手架,用来负责管理本地开发服务以及项目编译等。

创建项目

使用 dva 创建一个初始项目,项目会自动创建一个 demo。

npm install -g dva-cli

mkdir demo && cd demo

dva init

代码目录结构

mocks Mock 数据存放的位置

public 静态页面存放的位置

src 代码目录assets 资源目录,一些通用的 css/images

components 对应的是 dva 里面的 Component。

models 对应的是 dva 里面的 Model。

routes 是各个页面的入口,这里来引用功能所需的组件。

services 里面定义一些基础服务,比如 API 请求、错误处理、事件系统、弹窗提醒等服务。

utils 存放一些工具方法或类

.roadhogrc roadhog的配置文件。

.roadhogrc.mock.js 管理 Mock 数据的地方

拿我大学在的社团鲁大学生网的最新版 Android App 举例

首先分析一下功能:

暂时先看我截图的几个内容

首页

成绩查询

小e快报

二手市场

失物招领

心语墙

求助

抛去首页和成绩查询外,其它功能都有列表页和详情页。其实都是可以抽象化成文章的发布和展示(这里我并没有截图发布相关的页面)。

Model

如果使用面向对象模式,我可能会创建一个文章的模型,不同的功能都来继承这个模型,添加不同的属性和方法。

但现在看来只是一些简简单单的数据展示,每条数据没有太多需要用户操作的地方,我们可以使用 dva 提供给我们的 Model 来实现数据的展示和更新。

看起来我们不仅仅是需要这些内容,有些文章是可以评论的,我们是否需要一个评论的 Model 呢?

那我们可以看一下具体需要哪些 Model 了

Route

Model 搞定了,我们开始创建 Route。

其实这里的 Route 也是一个 Component,只不过是用来为不同的功能引用不用的 Component 的中转站,用来提供给 router.js 文件当做功能入口的。

如果我们每个功能的页面都要创建一个 Router 的话,我们可能会创建很多。我们可以通过需要展示的文章类型来创建 Route。

所以我把所有类似文章类型的列表使用一个 Route,然后在 Route 里面来根据类型引用不同的 Component。

另外还需要一个首页。

备注:所有的 Component 我们都用大驼峰的命名方法命名,与里面的 React 组件名称保持一直。

Component

Router 的内容不是很多,只有 3 个文件,感觉很薄,主要还是要在Component这里了。

Component 这边主要是根据业务来提供一些展示数据用的组件。

回想一下刚刚网站上的一些功能,总结我们需要的模块:

首页

首页只是一个九宫格,只是一些简单的页面,不需要什么逻辑。

文章类页面

这里要考虑文章的类型,是把文章按照类型分成不同的 Component,还是统统使用一个 Component 呢?

从文章列表来看,这四种文章的页面展示都不太一样,内容也不太一样,那难道我们真的是要每种文章类型使用不同的 Component 吗?

好吧,我们看一下有哪些比较通用的部分吧,既然不能在这文章类型一层进行统一,那我们看看里面会不会有重复的东西。

可以发现,把 用户信息(头像+名字+时间) 提取出来当做一个 Component,仔细观察,发现还有文章的浏览次数和评论的展示部分,评论也可以抽出来。

通用型

刚刚提到的

用户信息(头像+名字+时间)

浏览次数

评论

观察其它相关内容

右下角的 + 按钮

标题栏

搜索功能

创建文件

好吧,先整理这些,为这些 Component 创建目录和文件

我们把强业务相关的放在 bussiness 文件夹内,通用的放在 common 里。

helps 里的 Arc.js/List.js 分别代表文章页和列表页,其它文章类 component 也类似,less 文件分别是它们的样式文件。

Service

目前来说初期阶段,还没有太多的基础服务,在业务开发中,需要通用服务的地方会越来越多。

比如一定会需要一个服务来请求API,不管是使用 XMLHttpRequest 还是 Fetch。

未来可能还需要通用弹窗服务、通用错误服务,还会有更多贴近业务的服务。

Mock

建议每一个模块的mock文件分开写,这样不容易乱掉。

总结

举例的这个系统并不大,主要还是以数据展示为主,并没有特别多的数据操作和数据依赖关系以及数据处理相关的事务,所以实现起来还是相对简单。

这篇文章主要讲了目录结构的和组件的创建,还没有叙述如何连接使用,下篇文章将会连接 Route/Component/Model。

扫码关注w3ctech微信公众号

dva的用法_使用 dva 构建小型前端项目 (一)相关推荐

  1. Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目

    Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目 前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+ ...

  2. python商城开发_使用FastAPI 构建的商城项目API

    使用FastAPI 构建的商城项目API 学习FastAPI 构建项目目录 构建项目接口 环境 项目文件结构 文件结构是仿照Flask项目目录构建的,官方推荐的模版对我而言太大. . |_FastDe ...

  3. logisim数据选择器_利用Logisim构建小型数字系统(运动码表)

    本文主要介绍的是中国大学mooc上"计算机硬件系统设计"课程中的一个实验.首先,我对本课程的课程组深表感谢,开发了这么好的学习资源供学生在线学习. 下面介绍的是这个实验的设计过程. ...

  4. java温度传感器用法_结合Android JNI和前端的温度传感器测温案例

    大致总结下,理解不深入,随便说说 测人体温度的工程,需要对测温数据进行分析,取到有效的温度值:这是一个非传统的DS18B20那种单点温度传感器,而是多点测温,从底层传来的温度数据有768个,但应用场景 ...

  5. Docker多阶段镜像构建Dockerfile脚本示例:构建nodejs前端项目

    # 声明镜像来源为node:12.16.1 FROM node:12.16.1# 声明工作目录 WORKDIR /gva_web/# 拷贝整个web项目到当前工作目录 COPY . .# 通过npm下 ...

  6. jenkins自动构建VUE前端项目

    前端环境安装, 可以看我上一篇文章 链接: link Git安装, 可以官网下载tar.gz包, https://github.com/git/git/releases, 然后命令解压 tar -zx ...

  7. 实战某小型企业项目系列二:方案设计

    系列文章: 实战某小型企业项目系列一:需求描述 实战某小型企业项目系列二:方案设计 实战某小型企业项目系列三:项目实施规划_网络部分 实战某小型企业项目系列四:项目实施规划_系统部分 实战某小型企业项 ...

  8. 使用dva脚手架(dva-cli)快速构建React项目

    安装 dva-cli 你应该会更希望关注逻辑本身,而不是手动敲入一行行代码来构建初始的项目结构,以及配置开发环境. 那么,首先需要安装的是 dva-cli .dva-cli 是 dva 的命令行工具, ...

  9. dva的用法_dva入门讲解

    这里有一份简洁的前端知识体系等待你查收,看看吧,会有惊喜哦~如果觉得不错,恳求star哈~ dva是什么? DVA 是基于 redux.redux-saga 和 react-router 的轻量级前端 ...

最新文章

  1. SAP LSMW Standard Batch (Direct) Input 方式制作的LSMW工具导入OPEN PO 单据时候’税码’字段的处理
  2. DES对称加密(1)算法说明
  3. Oracle 11g Release 1 (11.1)——简单管理聚簇
  4. Linux 下Oracle Client JAVA JDBC 集成点滴
  5. 用EnumMaps映射枚举键
  6. GitHub+Hexo搭建自己的Blog之-主题配置
  7. C语言中#define的用法(转)
  8. python求解分支定界(branch-and-bound)问题使用pybnb基本架构
  9. dicom格式怎么转换_webm怎么转换mp4?视频格式转换你需要知道这个
  10. java实现斐波那契数列的三种方法
  11. 容器云职业技能大赛 不一样的比赛
  12. CTime/COleDateTime::Format方法的使用
  13. 【编译原理】判断文法是几型文法
  14. GPS坐标系与实际地图坐标系
  15. 旧款 mac 电脑重装 OS X Lion 10.7.5 系统的 U 盘安装盘制作及遇到问题和解决方法
  16. TCGA 亚型突变负荷代码
  17. 设置afni环境变量—打开afni加载默认的大脑模板
  18. PHP 判断两个字符串是否相等
  19. 【洛谷】P3518 [POI2011]SEJ-Strongbox
  20. 三十年变迁,我们大前端正青春!

热门文章

  1. 计算机变量符号有哪些,数值型数据的符号在计算机中如何表示
  2. 51nod-1603 限高二叉排列树
  3. 开放银行布局加速 敏捷迭代小程序生态技术开放平台打造迫在眉睫
  4. 嵌入式开发第20、21、22、23天(触摸屏电子相册)
  5. Flink源码解析 | 从Example出发:理解Flink启动流程
  6. Unity开发win10软件系列问题6: unity调用 win10 虚拟键盘tabtip.exe
  7. XCTF final noxss
  8. Linux 启动时间优化实战,2.41 秒启动应用!
  9. 芋道源码 精尽学习指南
  10. 20道经典Redis面试题