React:几个入门小Demo

2019-07-19 11:40:34 浏览数 (1)

本文将通过3个小Demo

Counter、TodoApp、UserCURD

带大家熟悉"React全家桶"开发流程

写在前面:

欢迎入坑React

有一大堆新技能需要get

语言:ES6(箭头函数、展开运算、解构赋值...); 思想:模块化(import、export...); 框架:React、Vue、AngularJS; 支撑:Nodejs、Babel、Webpack; 工具:Intellij IDEASublimeText; 还有很多...就不一一列举了...

...开始...

示例1. Counter

1.1. 效果

1.2. 技术栈

  • ES6(箭头函数、展开运算符等...)[猛戳查看详情]
  • React
  • Babel(ES6、JSX语法转换)[猛戳查看详情]
  • Webpack(集成Babel、文件打包)
  • Webpack-dev-server

1.3. 环境搭建

A. 初始化Nodejs工程

npm init

B. 安装依赖

npm install --save/--save-dev xxxxx

注:npm官方仓库不太稳定、下载速度也慢,可以考虑换“淘宝npm镜像”....

C. 配置Babel:.babelrc

babel在这的用途就是完成ES6、JSX语法转换;

注:像.babelrc这种命名风格的文件,最好使用IDE创建,会避免很多麻烦

D. 配置Webpack

D. 增加webpack-dev-server启动命令:

至此

基本环境配置结束

开始编码

1.4. 编码

A. 应用入口HTML:index.html

B. 应用入口JS:index.js

C. Counter组件:Counter.js

D. 运行、测试

1.5. 总结

注:扫码获取Counter完整源码

示例2. TodoApp

2.1. 效果

2.2. 技术栈

  • ES6(箭头函数、展开运算符等)[猛戳查看详情]
  • React
  • Babel(ES6、JSX语法转换)[猛戳查看详情]
  • Webpack(集成Babel、文件打包)
  • Webpack-dev-server

TodoApp引入了Redux:

  • Redux管理应用状态
  • 引入css模块

2.3. 环境搭建

A. 初始化Nodejs工程

npm init

注:参考 1.3-A 小节内容;

B. 安装依赖

C. 配置Babel:.babelrc

TodoApp中使用了ES6的“...”语法,由于webpack无法识别,只能借助 babel 的 transform-object-rest-spread 插件完成语法降级转换;

D. 配置Webpack:webpack.config.js

TodoApp 在 JS 模块中使用 import 将 CSS 文件作为模块引入,这么做程序结构更合理,但需要借助 webpack 的 css-loader、style-loader 才能正确打包这种代码;

  • css-loader 用于解析使用 import 语法引入的 css 模块;
  • style-loader 用于把解析后的 css 作为 style 标签内容插入到 html 中;

注:css-loader与style-loader通常配合使用,且执行顺序为先css-loader、后style-loader;

2.4. 编码

A. 应用入口HTML:index.html

B. 应用入口JS:index.js

TodoApp 使用 Redux 管理应用状态,index.js作为应用入口,创建了Redux的Store并通过Provider接口将Store扩展到整个应用范围中;

## src/index.js

附一篇Redux源码解析,阅读请猛戳

C. State、Action、Reducer:

  • State:应用状态结构定义及初值;
  • Action:描述了有哪些可能改变应用状态的事件,且只能通过给Redux发Action改变应用状态;
  • Reducer:Redux会将收到的Action消息转交给Reducer,并在Reducer中完成状态修改;

## src/reducer/TodoReducer.js

## src/reducer/index.js

D. UI组件:

前面已经用Redux的3要素:State、Action、Reducer完整描述了应用的运行逻辑;接下来就是用React构建UI界面,并与Redux建立数据、动作联系即可;

## src/component/TodoApp.js

## src/component/AddTodo.js

## src/component/VisibleTodos.js

## src/component/TodoFilter.js

E. 运行、测试

2.5. 总结

注:扫码获取TodoApp完整源码

示例3. UserCURD

3.1. 效果

3.2. 技术栈

  • ES6(箭头函数、展开运算符等)[猛戳!查看详情]
  • React
  • Babel(ES6、JSX语法转换)[猛戳!查看详情]
  • Webpack(集成Babel、文件打包)
  • Webpack-dev-server

TodoApp引入了Redux...

  • Redux 管理应用状态
  • 引入 css 模块

UserCURD引入了Saga...

  • AntDesign(蚂蚁金服的React UI库)
  • redux-saga 管理异步逻辑
  • react-router、react-router-redux 管理应用路由
  • 使用了 ES6 的 decorator 语法(@connect...)
  • Fetch API(替换了传统的 Ajax)[猛戳查看详情]
  • JSON-Server(伪造后台数据服务接口)

3.3. 环境搭建

A. 初始化Nodejs工程

npm init

注:参考 1.3-A 小节内容;

B. 安装依赖

(依赖比较多....)

C. 配置Babel:.babelrc

最关键的就是transform-decorators-legacy插件,它负责降级转换decorator语法;

(webpack无法直接识别类似@conncet(...)这种语法规则)

D. 配置Webpack

UserCURD 使用 JSON-Server 模拟了一个后台数据服务器,所以需要将与数据处理相关的HTTP请求中转到 JSON-Server 服务器上;

3.4. 总体架构

应用中的所有异步逻辑(请求数据、删除数据等)由redux-saga集中管理、应用的所有状态变化则由redux集中管理;借助这种结构,我们可以将应用的“状态变化”和“异步”这两个概念清晰的分离开

3.5. 目录结构

应用此时主要由component(UI)、reducer(状态变化)、saga(异步)3部分组成;

3.6. 编码

限于篇幅,只选了一组

Reducer、Saga、Component

进行说明

A. 应用入口JS:index.js

B. 看一个Reducer

reducer只用于处理应用状态改变,异步逻辑应写在saga中;

## src/reducer/userEdit.js

C. 看一个Saga

Saga有2大特性:

  • 1. 借助ES6的Generator语法,将异步逻辑以同步的方式书写,便于理解;
  • 2. Saga只用于处理异步,异步完成后的状态修改,还需要继续推送Action给Reducer;

## src/saga/userEdit.js

D. 看一个Component

UI组件中不包含业务逻辑,UI全部通过Action将业务操作转发给Saga、Reducer完成;

## src/component/userEdit.js

3.6. 总结

0 人点赞