赞
踩
拿到设计图,该如何高效快速的构建一个应用?
a. 框架
框架 | 特点 | 网址 |
---|---|---|
Vue.js | MVVM | https://cn.vuejs.org/ |
React | https://reactjs.org/ | |
Angular | https://angular.cn/ | |
AngularJS | https://angularjs.org/ | |
Koa | https://koa.bootcss.com/ |
基于 Node.js 平台的下一代 Web 开发框架。
Koa 是一个非常优秀的框架,然而对于企业级应用来说,它还比较基础。而 Egg 选择了 Koa 作为其基础框架,在它的模型基础上,进一步对它进行了一些增强。
也就是说,我们可以用 js 语言开发客户端软件了。其实呢,VS Code 这个客户端软件就是用 js 语言写的。
b. UI框架
基于 Vue.js 的组件库。
iView:https://www.iviewui.com/ 一套基于 Vue.js 的高质量 UI 组件库。
Ant Design:https://ant.design 基于 React 的 UI 组件库,主要用于研发企业级中后台产品。官网推出了 Ant Design pro 作为示例,可以看看。
Ant Design Mobile:https://mobile.ant.design/ 一个基于 Preact / React / React Native 的 移动端 UI 组件库。
Ant Design of Vue:https://vue.ant.design/docs/vue/introduce-cn/
Ant Design 的 Vue 实现,开发和服务于企业级后台产品。
c. 类库
d. CSS
名称 | 特点 | 网址 |
---|---|---|
Sass | https://sass-lang.com/ 入门文档:http://sass.bootcss.com/ | Sass 是成熟、稳定、强大的 CSS 扩展语言 |
Less | http://lesscss.org/ 入门文档:https://less.bootcss.com/ | 给 CSS 加点料 |
Stylus | http://stylus-lang.com/ |
e. 构建工具
名称 | 网址 |
---|---|
NPM | https://www.npmjs.com/ |
Yarn | https://yarnpkg.com/zh-Hans/ |
Webpack | https://webpack.js.org/ |
Gulp | https://www.gulpjs.com.cn/ |
Babel | https://babeljs.io/ |
ESLint | https://cn.eslint.org/ |
可组装的JavaScript和JSX检查工具。
名称 | 网址 | 功能 |
---|---|---|
PostCSS | https://www.postcss.com.cn/ | 用 JavaScript 工具和插件转换 CSS 代码的工具 |
whistle | https://wproxy.org/whistle/ | 代理抓包工具,很好很强大 |
Fiddler | https://www.telerik.com/fiddler | 代理抓包工具 |
Easy Mock | https://www.easy-mock.com | Mock数据 |
f. 编辑器 && IDE
名称 | 网址 |
---|---|
VS Code | https://code.visualstudio.com/ |
Sublime Text | https://www.sublimetext.com/ |
WebStorm | https://www.jetbrains.com/webstorm/ |
Atom | https://atom.io/ |
g. 编码规范
h. 静态站点搭建工具
i. 设计工具
j. 图标
名称 | 网址 |
---|---|
Font Awesome | http://www.fontawesome.com.cn/ |
Iconfont | https://www.iconfont.cn/ |
icomoon | https://icomoon.io/ |
EasyIcon | https://www.easyicon.net/ |
icons8 | https://icons8.cn/ |
IconStore | https://iconstore.co/ |
iconninja | http://www.iconninja.com/ |
k. 工具
CanIUse:https://caniuse.com/
浏览器兼容性查询。前端同学必须要知道。
l. 团队
a. jquery
jquery主要是用于处理js和html页面交互的,封装了很多操作dom的方法,以及ajax,相比于原生的js更加的简洁,提高了开发效率。
b. underscore
underscore.js可以理解为一个js的函数库,其中主要封装了一些常用的js操作函数方法,比如数组操作的map,reduce,filter等等,不过这些函数大多在es6中已经实现了。类似underscore的还是lodash,都是辅助js开发的。
c. Lodash
Lodash是js的工具库,它内部封装了诸多对字符串、数组、对象等常见数据类型的处理函数,其中部分是目前ECMAScript尚未制订的规范,但同时被业界所认可的辅助函数。
设计稿 => JSON API => 划分组件及子组件(并命名) => 确定组件层级 =>
单一功能原则来判定组件的范围
UI(或者说组件结构)与 JSON 数据模型一一对应
渲染 UI 和 添加交互 分离 => 创建复用组件(props) => 可重用的组件库 => render() 方法渲染 =>
找出应用所需的 state 的最小表示 => 根据需要计算出其他所有数据 =>
示例:任务清单应用
你要编写一个任务清单应用,你只需要保存一个包含所有事项的数组,而无需额外保存一个单独的 state 变量(用于存储任务个数)。当你需要展示任务个数时,只需要利用该数组的 length 属性即可。
我们的示例应用拥有如下数据:
通过问自己以下三个问题,你可以逐个检查相应数据是否属于 state:
包含所有产品的原始列表是经由 props 传入的,所以它不是 state;搜索词和复选框的值应该是 state,因为它们随时间会发生改变且无法由其他数据计算而来;经过搜索筛选的产品列表不是 state,因为它的结果可以由产品的原始列表根据搜索词和复选框的选择计算出来。
综上所述,属于 state 的有:
确定哪个组件能够改变这些 state,或者说拥有这些 state。
注意:React 中的数据流是单向的,并顺着组件层级从上往下传递。
步骤来判断:
根据以上策略重新考虑我们的示例应用:
因此,搜索词和复选框的值应该很自然地存放在 FilterableProductTable 组件中。
数据反向传递:处于较低层级的表单组件更新较高层级的 FilterableProductTable 中的 state。
React 通过一种比传统的双向绑定略微繁琐的方法来实现反向数据传递。尽管如此,但这种需要显式声明的方法更有助于人们理解程序的运作方式。
重新梳理一下需要实现的功能:每当用户改变表单的值,我们需要改变 state 来反映用户的当前输入。由于 state 只能由拥有它们的组件进行更改,FilterableProductTable 必须将一个能够触发 state 改变的回调函数(callback)传递给 SearchBar。我们可以使用输入框的 onChange 事件来监视用户输入的变化,并通知 FilterableProductTable 传递给 SearchBar 的回调函数。然后该回调函数将调用 setState(),从而更新应用。
结构一
├── build # 构建相关 ├── mock # 项目mock 模拟数据 ├── plop-templates # 基本模板 ├── public # 静态资源 │ │── favicon.ico # favicon图标 │ └── index.html # html模板 ├── src # 源代码 │ ├── api # 所有请求 │ ├── assets # 主题 字体等静态资源 │ ├── components # 全局公用组件 │ ├── directive # 全局指令 │ ├── filters # 全局 filter │ ├── icons # 项目所有 svg icons │ ├── lang # 国际化 language │ ├── layout # 全局 layout │ ├── router # 路由 │ ├── store # 全局 store管理 │ ├── styles # 全局样式 │ ├── utils # 全局公用方法 │ ├── vendor # 公用vendor │ ├── views # views 所有页面 │ ├── App.vue # 入口页面 │ ├── main.js # 入口文件 加载组件 初始化等 │ └── permission.js # 权限管理 ├── tests # 测试 ├── .env.xxx # 环境变量配置 ├── .eslintrc.js # eslint 配置项 ├── .babelrc # babel-loader 配置 ├── .travis.yml # 自动化CI配置 ├── vue.config.js # vue-cli 配置 ├── postcss.config.js # postcss 配置 └── package.json # package.json
结构二
├─api // 数据请求
├─assets // 静态资源
├─components // 组件
├─controllers // 控制层
├─instance // 页面实例
├─middleware // 中间件
├─mixins // 混入
├─publicComponents // 公共组件
│ ├─base // 基础组件
│ └─basic // 业务组件
├─routers // 路由
├─services // 业务处理
├─style // 样式
└─views // 页面结构
多页面工程
|-- src/ 源代码目录 |-- html/ html 文件目录 |-- page1.html page1 页面的 html 文件 |-- module1/ 子目录 |-- page2.html page2 页面的 html 文件 |-- ... |-- ... |-- js/ js 文件目录 |-- common/ 公共文件目录 |-- page1/ page1 页面的 js 目录 |-- module1/ 子目录 |-- page2/ page2 页面的 js 目录 |-- ... |-- ... |-- css/ css 文件目录 |-- common/ 公共文件目录 |-- page1/ page1 页面的 css 目录 |-- module1/ 子目录 |-- page2/ page2 页面的 css 目录 |-- ... |-- ... |-- less/ less 文件目录(内部结构跟上面类似) |-- images/ 图片文件目录(内部结构跟上面类似) |-- data/ api-mock 文件目录(内部结构跟上面类似) |-- ...
单页面应用
|-- src/ 源代码目录 |-- components/ 组件文件目录(如 react) |-- common/ 公共文件目录 |-- page1.js page1 页面的组件文件 |-- module1/ 子目录 |-- page2.js page2 页面的组件文件 |-- ... |-- ... |-- services/ service 文件目录 |-- service1.js page1 页面的 service |-- module1/ 子目录 |-- service2.js page2 页面的 service |-- ... |-- ... |-- models/ model 文件目录 |-- model1.js page1 页面的 model |-- module1/ 子目录 |-- model2.js page2 页面的 model |-- ... |-- ... |-- ... |-- images/ 图片文件目录(内部结构跟上面类似) |-- data/ api-mock 文件目录(内部结构跟上面类似) |-- ...
├──src │ ├──view //页面 │ ├──carts //购物车页面 │ ├──component //该页面专用组件 │ ├──model.js //该页面的数据层[redux和vuex文件的细分] │ ├──index.js //该页面的布局文件 │ ├──service.js //该页面用到的api │ ├──index.scss //该页面用到的scss │ ├──utils //JS工具库 │ ├──api //共用api接口【永不删除】 │ ├──style //共用style【永不删除】 │ ├──config //配置 │ ├──model //共用model层其实是redux或vux文件【永不删除】 │ ├──component //共用组件 │ ├──map //地图组件 │ ├──model.js //该组件的数据层[redux和vuex文件的细分] │ ├──index.js //该组件的布局文件 │ ├──service.js //该组件用到的api │ ├──index.scss //该组件用到的scss │ ├── App.vue // 入口页面 │ ├── main.js // 入口 加载组件 初始化等 │ ├── assets // 主题 字体等静态资源【永不删除】 ├── index.html // html模板 └── package.json
前端项目来源:前端项目目录结构
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。