1. react
学习前的前置条件
在学习 react
之前首先需要熟悉 class
用作用和用法。
2. 学习 class
Class
的作用就是创建构造函数,在 ES5
中我们使用大写字母开头的函数作为构造函数,使用 new
关键字创建它的实例。在拥有class
关键字之后,我们就可以直接使用 class
来定义所有的构造函数及其方法,并使用 new
关键字创造实例。
与 ES5
中一致,类的 constructor
方法直指类本身。
在 class
内部的方法就等同于 ES5
中使用 prototype
创建构造函数的原型函数。
我们可以使用 Object.assign
一次性为类创建多个方法。
与 ES5
中不一致的是,class
类必须使用 new
调用。
3. 通过 webpack
搭建开发 react
的开发环境
主要分为一下几个步骤,首先在项目中使用yarn
安装react
和 react-dom
,接下来在项目中使用yarn
安装babel
、@babel-preset-react
和@babel/preset-env
。接着分别在webpack.config.js
和.babellrc
中进行配置。
4. react
的核心
react
是以数据为驱动的单向数据流,同时也是组件化编程。react
通过jsx
实现组件化编程,接着通过虚拟 DOM
进行展示。
5. 通过 manifest
实现离线网页
6. JSX
JSX
是react
所支持的语法,用于在JS
中嵌入HTML
代码。
在JSX
中写代码,所有标签必须闭合、最外层只能有一个元素包裹,并且在使用表达式时必须使用{}
。
7. 组件
组件的书写可以分为两种,一种是函数组件,还有一种是使用class
声明的组件。
使用组件的时候,第一种方法是我们通过使用props
对其进行传参,组件内部不能修改;第二种方法是使用 state
,这种方式的数据是私有的,完全受控于组件。需要注意的是,函数式组件只能使用props
方式,而class
组件两种方式都可以使用。
8. 事件处理
当为组件绑定事件处理函数的时候,所创建的函数必须使用驼峰命名法,并且修改函数的 this
指向问题。
修改 this
指向有三种方法,第一种方法是使用 bind
进行修改;第二种方法是在调用时使用 this.xxx()
;第三种方法是在调用时使用箭头函数。
9. 组件生命周期
必须要明确一点,组件生命周期函数只存在于 class
声明的组件中。
生命周期函数gitInitialState
,用于在 state
初始化。
getDefaultProps
用于props
默认值。
componentWillMount
组件即将挂载,它在生命周期时只会被调用一次,可用于做一些组件内部初始化工作。
componentDidMount
组件挂载完毕,在render
之后调用,在这个阶段 DOM
已经可以使用。
shouldComponentUpdate
决定组件是否需要重新渲染。
componentWillUpdate
组件即将更新。
componentDidUpdate
组件更新完毕。
componentWillUnmount
组件即将被销毁,可用于清除计时器等收尾操作。
10. react
路由
使用react-router
进行路由处理。首先安装react-router-dom
,在代码中引入 react-router-dom
。
嵌套路由
动态路由
带权限的路由
11. react
类型检测
12. redux
状态管理器
状态管理redux
。
在使用redux
时,我们所遵循的原则是单向数据流原则;state
是只读属性,我们只能使用纯函数对其进行修改。
12.1 安装redux
使用npm i redux -S
或yarn add redux
进行安装。
12.2 redux
四大概念
四大概念分别是store
、state
、action
、reducer
。
12.2.1 store
一个应用中只能有一个store
,store
是一个对象,用于存放整个应用的state
。
import { createStore } from 'redux'
const store = createStore(reducer)
12.2.2 state
state
是整个应用当前的数据,可以通过store.getState
进行获取。
12.2.3 action
action
是描述事件发生的对象。必须设置type
属性表示要去执行的动作。
const action = {
type: 'ADD_TODO', // 事件类型
payload: 'learn redux' // 该 action 所携带的数据
}
定义好事件类型之后,使用store.dispatch()
触发事件。
12.2.4 reducer
reducer
是描述该怎么更新state
的函数。reducer
接受两个参数,第一个参数是初始化的state
,第二个参数是action
。
function reducer(state="javascript", action) {
switch(action.type) {
case: 'HTML':
return 'this is html'
break
case: 'javascript':
return 'this is javascript'
break
default:
return state
}
}
12. react-redux
使用yarn add react-redux
进行安装。
react-redux
可以使组件通过 this.props
的方式获取store
中的state
。
在react-redux
中组件分为两类,分别是UI组件和容器组件。
在这两种组件中,有两个组件非常重要,分别是Provider
组件和connect
组件,Provider
组件作为react
的顶层组件,接受store
作为props
,所有自组件通过props
获取数据。connect
组件使UI组件升级为容器组件。