整体分析
- 整体分析有 config、dist、node modules、src 四个部分。
(1) config 是项目的整体配置文件 (2) dist 指编译后的文件,可以理解为压缩发布版
(3) node modules是 npm 项目加载的项目依赖的模块。(4)src 目录是要开发的目录/源码文件
还有一些其他的:
(1)docs 文档
(2)examples 示例文件
(3)test 测试脚本
(4).gitignore 告诉git哪些文件不要上传到 GitHub,比如数据库配置文件等
(5)LICENSE.txt 授权协议
(6)README.md 自述文件,整个项目的简介、使用方法等
(7)bower.json Bower 包管理器配置文件
(8)package.json npm 包管理器配置文件
GitHub 下 dist 和 src,dest 目录的区别
dist是编译后的文件,压缩版; src是源码文件;
压缩源(src)文件,生成压缩包到(dest),dest一般和src配对出现。
reduce
资源:
reduce1:菜鸟教程
reduce2:简书教程
reduce3:经典用法实例
reduce4:高级技巧
reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。
callback (执行数组中每个值的函数,包含四个参数)1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))2、currentValue (数组中当前被处理的元素)3、index (当前元素在数组中的索引)4、array (调用 reduce 的数组)initialValue (作为第一次调用 callback 的第一个参数。)
educe() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
架构
React开发:详解
- ├── assets
- │ └── index.css //放置一些全局的资源文件 可以是js 图片等
- ├── config
- │ ├── webpack.config.dev.js 开发环境webpack打包设置
- │ └── webpack.config.prod.js 生产环境webpack打包设置
- ├── package.json
- ├── README.md
- ├── server server端渲染文件,如果对不是很了解,建议参考koa教程
- │ ├── app.js
- │ ├── clientRouter.js // 在此文件中包含了把服务端路由匹配到react路由的逻辑
- │ ├── ignore.js
- │ └── index.js
- └── src
- ├── app 此文件夹下主要用于放置浏览器和服务端通用逻辑
- │ ├── configureStore.js //redux-thunk设置
- │ ├── createApp.js //根据渲染环境不同来设置不同的router模式
- │ ├── index.js
- │ └── router
- │ ├── index.js
- │ └── routes.js //路由配置文件! 重要
- ├── assets
- │ ├── css 放置一些公共的样式文件
- │ │ ├── _base.scss //很多项目都会用到的初始化css
- │ │ ├── index.scss
- │ │ └── my.scss
- │ └── img
- ├── components 放置一些公共的组件
- │ ├── FloatDownloadBtn 公共组件样例写法
- │ │ ├── FloatDownloadBtn.js
- │ │ ├── FloatDownloadBtn.scss
- │ │ └── index.js
- │ ├── Loading.js
- │ └── Model.js 函数式组件的写法
- │
- ├── favicon.ico
- ├── index.ejs //渲染的模板 如果项目需要,可以放一些公共文件进去
- ├── index.js //包括热更新的逻辑
- ├── pages 页面组件文件夹
- │ ├── home
- │ │ ├── components // 用于放置页面组件,主要逻辑
- │ │ │ └── homePage.js
- │ │ ├── containers // 使用connect来封装出高阶组件 注入全局state数据
- │ │ │ └── homeContainer.js
- │ │ ├── index.js // 页面路由配置文件 注意thunk属性
- │ │ └── reducer
- │ │ └── index.js // 页面的reducer 这里暴露出来给store统一处理 注意写法
- │ └── user
- │ ├── components
- │ │ └── userPage.js
- │ ├── containers
- │ │ └── userContainer.js
- │ └── index.js
- └── store
- ├── actions // 各action存放地
- │ ├── home.js
- │ └── thunk.js
- ├── constants.js // 各action名称汇集处 防止重名
- └── reducers
- └── index.js // 引用各页面的所有reducer 在此处统一combine处理
│ App.js 根组件│ index.js 项目入口│ style.js 注入到全局的样式, 重置默认样式├─store| index.js 唯一的store| reducer.js 合并各组件的reducer|├─common 通用组件文件夹│ ├─header 头部组件,它独立于页面之外,却又较为复杂,所以单独抽出│ │ │ index.js 组件入口,布局与逻辑│ │ │ style.js 组件使用标签以及样式│ │ ││ │ └─stroe header区域所有的数据│ │ actionCreators.js 统一管理action│ │ constants.js 用常量替代所有的action的type值│ │ index.js 导出actionCreators与reducer│ │ reducer.js 根据不同的action修改state│ ││ └─tools 存放所有的小组件│ │ index.js 导出所有的工具组件│ ││ ├─components 放置通用组件│ │ └─backTop 回到顶部组件│ │ index.js│ │ style.js│ ││ └─store 这里打算用一个文件夹来管理所有通用组件的数据,↓│ actionCreators.js 因为通用组件主要是样式,逻辑是少数│ contants.js│ index.js│ reducer.js│├─pages 所有的页面│ ││ ├─home 主页│ │ │ index.js 主页入口│ │ │ style.js 主页样式│ │ ││ │ ├─components 首页被划分为下列组件│ │ │ List.js 列表组件│ │ │ Recommed.js 推荐组件│ │ │ Topic.js 话题组件│ │ │ Writer.js 作者组件│ │ ││ │ └─store│ │ actionCreators.js 统一管理action│ │ constains.js 用常量替代所有的action的type值│ │ index.js 导出actionCreators与reducer│ │ reducer.js 根据不同的action修改state│ ││ ├─detail 文章详情页面│ │ │ index.js│ │ │ loadable.js 使用loadable包装组件,让其可异步加载代码│ │ │ style.js│ │ ││ │ └─store│ │ actionCreators.js│ │ constains.js│ │ index.js│ │ reducer.js│ ││ ├─login 登录页│ │ │ index.js│ │ │ style.js│ │ ││ │ └─store│ │ actionCreators.js│ │ constains.js│ │ index.js│ │ reducer.js│ ││ └─write 写文章页│ index.js 没有再往下写了│└─statics 静态资源文件│ logo.png│└─iconfont iconfont文件,全是美美的图标demo.cssiconfont.cssiconfont.eoticonfont.jsiconfont.svgiconfont.ttficonfont.woff
一般流程:
- 构思应用的state结构
- actions -> actionCreator
- reducers(redux工作完成,开始react组件)
- components
- containers(index页面,ReactDOM渲染)
- 上述完成后,react-redux库连接二者
- 中途可能会用到redux devtools调bug,查看状态什么的
