React的生命周期函数及使用场景
生命周期
- 生命周期函数指在某一时刻组件会自动执行(调用)的函数
- 初始化过程
- setup
- props
- state
- 挂载过程
- componentWillMount:组件即将被挂载到页面之时,会自动执行
- render:组件被挂载到页面之时,会自动执行
- componentDidMount:组件被挂载到页面之后,会自动执行
- 更新过程
props
- componentWillReceiveProps
- 满足该函数执行的两个条件
- 要从父组件接收参数
- 只要父组件的render函数被重新执行了,子组件的该函数就会被执行
- 满足该函数执行的两个条件
- shouldComponentUpdate:组件被更新之前,自动被执行(需要返回一个bool值,表示组件是否需要更新)
- componentWillUpdate:组件被更新之前,它会自动执行,但是它在 shouldComponentUpdate 之后被执行,如果 shouldComponentUpdate 返回 false 这个函数就不被执行了
- render
- componentDidUpdate:组件更新完成之后,它会被执行
- componentWillReceiveProps
state
- shouldComponentUpdate
- componentWillUpdate
- render
- componentDidUpdate
- 卸载过程
- componentWillUnmount
- 初始化过程
- 挂载过程代码示例
import React, { Component } from "react"; class TodoList extends Component { // 组件即将被挂载到页面之时,会自动执行 componentWillMount () { console.log('挂载前执行了!') } // 组件被挂载到页面之后,会自动执行 componentDidMount () { console.log('挂载完执行了!') } // 组件被挂载到页面之时,会自动执行 render () { return ( console.log('挂载上执行!') ) } } export default TodoList
- 更新过程代码示例
import React, { Component } from "react";
class TodoList extends Component {
// 组件被更新之前,自动被执行:需要返回一个bool值,表示组件是否需要更新
shouldComponentUpdate () {
console.log('要更新了!')
return true
}
// 组件被更新之前,它会自动执行,但是它在 shouldComponentUpdate 之后被执行,如果 shouldComponentUpdate 返回 false 这个函数就不被执行了
componentWillUpdate () {
console.log('componentWillUpdate')
}
// 组件更新完成之后,它会被执行
componentDidUpdate () {
console.log('更新成功后执行!')
}
// 组件被挂载到页面之时,会自动执行
render () {
return (
console.log('挂载上执行!')
)
}
}
export default TodoList
卸载过程代码示例
使用场景
-
父组件props的变动,触发父组件render,父组件render触发导致子组件render也被触发,造成性能的损失。
- 解决方案 在子组件使用生命周期函数
shouldComponentUpdate
在父组件未进行dom变更时,不对子组件做render执行
- 解决方案 在子组件使用生命周期函数
-
在construct中就写入 bind 行为,保证程序中只执行一次
-
ajax 行为
componentDidMount
construct
(不建议)componentWillMount
(不建议+)