¶一、简介
React 是一个声明式,高效且灵活的用于构建用户界面的 JavaScript 库。
¶二、安装
1 | 安装脚手架Create React App |
如果下载比较慢,建议替换淘宝源:
1 | 换源 |
¶三、创建项目
¶1. 脚手架创建react工程
1 | 创建项目 |
删除掉非必须的文件后,留下如下目录结构的文件:
1 | . |
¶2. 编辑相关文件
manifest.json
1 | { |
index.html
1 |
|
index.js
1 | import React from "react"; |
App.js
1 | import React from "react"; |
¶3. 运行项目
1 | cd my-app |
¶四、React组件
Father.jsx
组件文件后缀可以是.js
,也可以是.jsx
。
1 | import React from "react"; |
index.js
1 | import React from "react"; |
¶五、组件状态state
state
是组件的当前状态,可以把组件简单看成一个“状态机”,根据状态 state
呈现不同的 UI 展示。
一旦状态(数据)更改,组件就会自动调用 render
重新渲染 UI,这个更改的动作会通过 this.setState
方法来触发。
StateApp.jsx
1 | import React from "react"; |
index.js
1 | import React from "react"; |
¶六、生命周期
LifeApp.jsx
1 | import React from "react"; |
index.js
1 | import React from "react"; |
¶七、组件传值
以下示例包含组件间的父传子和子传父两种情况。
FatherApp.jsx
1 | import React from "react"; |
ChildcomApp.jsx
1 | import React from "react"; |
index.js
1 | import React from "react"; |
¶八、事件处理
React 元素的事件处理和 DOM 元素类似。但是有一点语法上的不同:
- React 事件绑定属性的命名采用驼峰式写法,而不是小写。
- 如果采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串(DOM 元素的写法)
HTML 通常写法是:
1 | <!--此处的onclick是小写的,传入的函数写法是一个字符串--> |
React 中写法为:
1 | <!--此处的onClick是驼峰式,传入的函数写法是函数本身--> |
事件处理案例:
1 | import React from "react"; |
¶九、条件渲染
React 中的条件渲染和 JavaScript 中的一致,使用 JavaScript 操作符 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI。
1 | import React from "react"; |
¶十、列表 & Keys
1 | import React from "react"; |
¶十一、组件插槽
1 | import React from "react"; |
¶十二、路由
安装依赖
1 | npm install react-router-dom --save |
Home.jsx
1 | import React from "react"; |
About.jsx
1 | import React from "react"; |
index.js
1 | import React from "react"; |
¶十三、状态管理Redux
¶1. redux工作流程
¶2. 核心概念
-
action:
标识要执行行为的对象(同步
action
)。它的值也可以是函数(异步action
),但需要引入redux-thunk
。包含2个方面的属性:
type
: 标识属性, 值为字符串, 唯一, 必要属性xxx
(一般起名为data): 数据属性, 值类型任意, 可选属性 -
reducer
为一个函数,根据老的state和指定的action
, 返回一个新的state
,不能修改老的state
。 -
store
将
state
,action
与reducer
联系在一起的对象,是redux
最核心的管理对象。内部管理着state
和reducer
,提供方法有:getState()
: 得到state
dispatch(action)
: 分发action
, 触发reducer
调用, 产生新的state
subscribe(listener)
: 注册监听, 当产生了新的state
时, 自动调用
¶3. 相关API
1 | redux中包含: createStore(), applyMiddleware(), combineReducers() |
¶4. 安装依赖
1 | npm install redux --save |
¶5. 使用案例
action-types.js
1 | /* |
actions.js
1 | /* |
reducers.js
1 | import { INCREMENT, DECREMENT } from "./action-types"; |
App.jsx
1 | import React from "react"; |
index.js
1 | import React from "react"; |
¶十四、react-redux
专门用来简化react应用中使用redux的插件库。
¶1. 为什么要使用react-redux?
-
redux与react组件的代码耦合度太高
-
编码不够简洁
¶2. 组件分类
React-Redux将所有组件分成两大类:
-
UI组件
a. 只负责 UI 的呈现,不带有任何业务逻辑
b. 通过props接收数据(一般数据和函数)
c. 不使用任何 Redux 的 API
-
容器组件
a. 负责管理数据和业务逻辑,不负责UI的呈现
b. 使用 Redux 的 API
通过React-Redux的使用可以让UI组件中屏蔽redux依赖,从而实现解耦的效果。
¶3. 安装依赖
1 | npm install --save react-redux |
¶4. 使用案例
action-types.js
1 | /* |
actions.js
1 | /* |
reducers.js
1 | import { INCREMENT, DECREMENT } from "./action-types"; |
components/counter.jsx
1 | /* |
containters/App.jsx
1 | /* |
index.js
1 | import React from "react"; |
¶十五、redux异步编程
¶1. 为什么要使用
因为redux默认是不能进行异步处理的,但实际应用中却可能需要在redux中用到异步处理。
¶2. 安装依赖
1 | npm install --save redux-thunk |
¶3. 使用案例
action-types.js
1 | /* |
actions.js
1 | /* |
reducers.js
1 | import { INCREMENT, DECREMENT } from "./action-types"; |
components/counter.jsx
1 | /* |
containters/App.jsx
1 | /* |
index.js
1 | import React from "react"; |