JSX语法
1  | const text = {  | 
class组件和函数组件
1  | // class组件  | 
React event 事件
1  | clickHandle = (event) => {  | 
Form表单
1  | // 用 htmlFor 代替 for  | 
受控组件 vs 非受控组件
- 优先使用受控组件,符合React设计原理;
 - 必须操作DOM时,再使用非受控组件;
 
1  | // 受控组件  | 
1  | // 非受控组件 - 使用场景  | 
setState
- 不可变值(函数式编程,纯函数);
 
1  | /** 不能直接修改 this.state 里的属性的值 **/  | 
- 可能是异步更新;
 
1  | 1. this.setState 直接使用是异步的,需要回调里接收最新值  | 
- 可能会被合并;
 
1  | 1. 传入对象,会被合并(类似 Object.assign )。执行结果只一次 +1  | 
组件生命周期

函数组件和Class组件的区别
函数组件
- 纯函数,输入props,输出JSX;
 - 没有实例,没有生命周期,没有state;
 - 不能扩展其他方法;
 
Portals 作用和使用场景
子组件逃离父组件
- overflow: hidden
 - 父组件 z-index 值太小
 - fixed 需要放在 body 第一层级
 
1  | class App extends React.Component {  | 
Context
- 主要用于数据的传递,逻辑不复杂的场景,如主题切换,语言切换等;
 - 主要api,1. 生产数据:Context.Provider;
 
- 消费数据 函数组件:Context.Consumer,Class组件:static contextType = ThemeContex;
 
1  | // demo 主题切换  | 
异步组件
- import()
 - React.lazy
 - React.Suspense
 
1  | import React from 'react'  | 
*性能优化(重要)
- shouldComponentUpdate 简称(SCU)
- SCU默认返回 true,即 React 默认重新渲染所有子组件;
 - 必须配合”不可变值“一起使用;
 - 可先不用SCU,有性能问题时在考虑使用;
 
 - PureComponent 和 React.memo
- Class组件 PureComponent,SCU中实现了浅比较;
 - memo,函数组件中的PureComponent;
 - 浅比较已使用大部门情况(尽量不要做深度比较);
 
 - 不可变值 immutable.js
- 彻底拥抱”不可变值“;
 - 基于共享数据(不是深拷贝),速度好;
 - 有一定学习和迁移成本,按需使用;
 
 
1  | // shouldComponentUpdate Demo  | 
关于组件公共逻辑的抽离
- mixin,已被 React 弃用
 - 高阶组件 HOC
 - Render Props
 
HOC vs Render Props
- HOC:模式简单,但会增加组件层级;
 - Render Props:代码简洁,学习成本高;
 - 按需使用;
 
1  | // 高阶组件 HOC Demo 7-24  | 
1  | // Render Props 7-25  | 
React.createRef() 使用
1  | // demo  |