- 组件的生命周期
- 过程
- 装载(Mounting) :组件被插入到 DOM 中;
- 更新(Updating) :组件重新渲染以更新 DOM;
- 卸载(Unmounting) :组件从 DOM 中移除。
- 过程
- 包含 will 的方法在某个时间节点之前执行
- 包含 did 方法在某个时间节点 之后 执行
- 三个阶段(按调用顺序
- 实例化(装载)
- getDefaultProps(在任何实例创建之前执行,不在装载阶段执行
- 该方法在 组件创建时( createClass )执行一次并缓存返回值。
- 如果组件使用时未设置属性,就从缓存中读取默认属性。
- getDefaultProps() 返回的缓存数据会在所有实例间共享。
- getInitialState
- 组件装载之前执行一次,返回值用作 this.state 的初始值。
- constructor
- 构造器。
- super();//第一行必须是这个。调用父组件的构造器。
- this.state = {......};//初始化实例的属性和组件的状态。
- componentWillMount
- 在完成首次渲染之前被调用。
- render(必需
- 创建一个虚拟DOM
- 只能通过this.props和this.state访问数据
- 可以返回null,false或者react组件
- 只能有一个*组件
- componentDidMount
- 真实的DOM已经被渲染之后调用
- 可以访问原始DOM,如测量渲染出DOM元素的高度,或用计时器操作它
- 此方法中可进行
- 与其他 JavaScript 框架集成,如初始化 jQuery 插件;
- 使用 setTimeout / setInterval 设置定时器;
- 通过 Ajax/Fetch 获取数据;
- 绑定 DOM 事件;
存在期(更新)
- componentWillReceiveProps(state改变时,不调用
- 组件的props发生改变时才调用(任意时刻,组件的props都可以通过父辈组件来更改
- 函数内可以更改props对象及更新state
- 此时props并没有改变,通过this.prop获取到的仍是还没有更改的
- shouldComponentUpdate
- componentWillReceiveProps调用后调用
- 首次渲染或调用了forceUpdate方法后不调用
- componentWillUpdate
- 组件会在接收到新的props或state进行渲染前,调用该方法
- 该方法中不可以更新state或props
- 此时props并没有改变,通过this.prop获取到的仍是还没有更改的
- render
- componentDidUpdate
- 更新渲染好的DOM
- 此处获取到的是改变后的props
销毁&清理期(卸载)
- componentWillUnmount
- 需要撤销componentDidMount中添加的所有任务,如:定时器、事件监听
反模式
- 尝试在constructor中通过this.props来创建state是一种反模式
- 从prop中计算然后将它赋值为state的做法也是一种反模式
- 正确模式应该是在渲染时,计算这些值
- 保证计算后的值永远不会与派生出它的props值不同步