react的生命周期大概分为前端
当组件挂载到DOM树上以后,props/state被修改会致使组件进行更新操做。更新过程会以此调用以下的生命周期函数:java
卸载过程只涉及一个函数componentWillUnmount,当React组件要从DOM树上删除前,会调用一次这个函数。这个函数常常用于去除componentDidMount函数带来的反作用,例如清楚计时器、删除componentDidMount中创造的非React元素。react
要修改state,只能使用this.setState(),不能使用this.state.value='myData' 相似方式设置state,一是不会驱动从新渲染,二是极可能被后面的操做替换,形成没法预知的错误。此外,React利用状态队列来实现setState的异步更新,避免频繁地重复更新state。当同时作了不少setState操做的时候,react会智能的合并成一个setState,当须要肯定的setState完成后的操做,可使用web
setState({}, () => {
// 在这里进行state改变后的操做
})
复制代码
setState的调用是有风险的,在某些生命周期函数中调用可能会无用甚至早恒循环调用致使崩溃。state的初始化通常在构造函数中实现;setState能够在装载过程的componentWillMount、componentDidMount中调用;setState能够在更新过程当中的componentWillReceiveProps、componentDidUpdate中调用服务器
render是一个异步函数,render执行后并不会直接生成Dom,而是生成虚拟Dom节点(模拟HTML Dom节点的一个javaScript数据结构),什么时候生成真实的DOM树取决于react框架自己的计算。 参考 腾讯前端数据结构
static getDerivedStateFromProps(nextProps, prevState) {
//根据nextProps和prevState计算出预期的状态改变,返回结果会被送给setState
}
复制代码
全部被删除的生命周期函数,目前还凑合着用,可是只要用了,开发模式下会有红色警告,在下一个大版本(也就是React v17)更新时会完全废弃。框架
static getDerivedStateFromProps(nextProps, prevState) {
4. Updating state based on props
7. Fetching external data when props change
}
constructor() {
1. Initializing state
}
componentDidMount() {
2. Fetching external data
3. Adding event listeners (or subscriptions)
}
shouldComponentUpdate() {
}
render() {
}
getSnapshotBeforeUpdate(prevProps, prevState) {
8. Reading DOM properties before an update
}
componentDidUpdate(prevProps, prevState, snapshot) {
5. Invoking external callbacks
6. Side effects on props change
}
componentWillUnmount() {
}
// before
componentWillMount() {
// 1. Initializing state
// 2. Fetching external data
// 3. Adding event listeners (or subscriptions)
}
componentWillReceiveProps() {
// 4. Updating state based on props
// 6. Side effects on props change
// 7. Fetching external data when props change
}
componentWillUpdate(nextProps, nextState) {
// 5. Invoking external callbacks
// 8. Reading DOM properties before an update
}
复制代码
参考 程墨dom