You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
classExampleComponentextendsReact.Component{// Initialize state in constructor,// Or with a property initializer.state={isScrollingDown: false,lastRow: null,};staticgetDerivedStateFromProps(props,state){if(props.currentRow!==state.lastRow){return{isScrollingDown: props.currentRow>state.lastRow,lastRow: props.currentRow,};}// Return null to indicate no change to state.returnnull;}}
这个方法的常用作用也很明显了:父组件传入新的 props 时,用来和当前的 state 对比,判断是否需要更新 state。以前一般使用 componentWillReceiveProps 做这个操作。
React 的生命周期大致分为:
从 React v16 开始,还对生命周期加入了错误处理(Error Handling)。
V16.3.0之前
创建阶段(Mounting)
更新阶段(Updating)
props发生变化时
state发生变化时
卸载阶段(Unmounting)
图示:
V16.3.0之后
创建阶段(Mounting)
更新阶段(Updating)
props / state 发生变化时
卸载阶段(Unmounting)
图示:
删除生命周期
所有被删除的生命周期函数,目前还凑合着用,但是只要用了,开发模式下会有红色警告,在下一个大版本(也就是React v17)更新时会彻底废弃。会保留另外一种形式:
React-Hooks 的生命周期
生命周期详解
constructor()
构造函数通常用于:
static getDerivedStateFromProps()
当创建时、接收新的 props 时、setState 时、forceUpdate 时会执行这个方法。
这是一个静态方法,参数
nextProps
是新接收的props
,prevState
是当前的state
。返回值(对象)将用于更新state
,如果不需要更新则需要返回null
。下面是官方文档给出的例子
这个方法的常用作用也很明显了:父组件传入新的
props
时,用来和当前的state
对比,判断是否需要更新state
。以前一般使用componentWillReceiveProps
做这个操作。这个方法在建议尽量少用,只在必要的场景中使用,一般使用场景如下:
props
更新state
props
和state
的不匹配情况更新state
详情可以参考官方文档的最佳实践 You Probably Don’t Need Derived State
render
每个类组件中,
render()
是唯一必须的方法。render() 正如其名,作为渲染用,可以返回下面几种类型:
componentDidMount()
组件完成装载(已经插入 DOM 树)时,触发该方法。这个阶段已经获取到真实的 DOM。
一般用于下面的场景:
componentWillUnmount()
在组件卸载或者销毁前调用。这个方法主要用来做一些清理工作,例如:
componentDidCatch()
任何子组件在渲染期间,生命周期方法中或者构造函数 constructor 发生错误时调用。
错误边界不会捕获下面的错误:
参考资料
The text was updated successfully, but these errors were encountered: