- 受控组件的数据或状态由React来进行管理
- 非受控组件的数据或状态由自身维护
- React.memo(),PureComponent,shouldComponentUpdate
- 组件层级不要太深
- 不要传递无关的属性
- 如果是函数式组件,是不存在这个问题的。
- 在类组件中使用箭头函数的方式来定义函数。
- 类组件有生命周期函数,生命周期函数中可以访问props和state,函数式组件时没有生命周期函数。
- 类组件有this概念,函数式组件没有这个概念。
- 类组件可以针对props和state进行性能优化,函数式组件只能针对props做性能优化。
refs提供了访问DOM节点和React元素的能力
-
创建Refs的方式
- 类组件中通过React.createRef和回调Refs的方式创建。
- 函数式组件中用React.useRef创建。
-
Refs的使用
- 创建的ref可以添加给类组件,用于获取组件实例。
- 可以添加给HTML元素,获取dom节点。
- 可以作为props传递给子组件,获取子组件内部的DOM节点或元素。
-
refs的使用场景
- 需要管理焦点、选择文本或媒体播放时
- 触发式动画
- 与第三方 DOM 库集成
state 是组件内部管理的状态,是可变的。
props 是外部传入的状态,是不可变的。
- 高阶组件是一个函数,接收一个组件作为参数,返回一个新的组件。
- 主要用来抽离公共逻辑,渲染劫持。比如打印日志,抽离公共state。
HTML表单元素通常会自己维护值的状态,并且会根据用户输入进行更新,值和操作都由React控制的表单元素称为受控组件。
创建并返回指定类型的新 React 元素
React.createElement 接收三个参数,type是必须的,可以是标签名字符串,可以是React组件类型,也可以是React Fragment
React.createElement(
type,
[props],
[...children]
)
JSX 是一种语法形式,可以用JS的语法来写HTML代码,在编译时会被转化为js对象。
如果直接更新state,组件时不会重新渲染的。
在React中,state的作用是,在它变化的时候要触发DOM更新,必须通过指定的方法进行更新。
-
挂载阶段
constructor()
static getDerivedStateFromProps()
(不常用,作用是返回一个新的对象来更新state)render()
componentDidMount()
-
更新阶段
- shouldComponentUpdate
- render
- componentDidUpdate
-
卸载阶段
-
componentWillUNmount
它用于取消任何的网络请求,或删除与组件关联的所有事件监听器。
-