React生命周期

普通DOM操作
import "./styles.css";
//create
let app = document.getElementById("app")
let div = document.createElement('div')
let state = 0
// UNSAFE_componentWillMount
//render == update
div.innerHTML = `
<div>
<p id="number">${state}</p>
<button id="plus">+1</button>
<button id="die">die</button>
</div>
`
//mount
app.appendChild(div)
let number = document.getElementById("number")
let plus = document.getElementById('plus')
plus.onclick= () => {
state += 1
//update div == render
number.innerText = state
}
let die = document.getElementById('die')
die.onclick = () => {
plus.onclick = null
die.onclick = null
div.remove()
div = null // destroy div
}
生命周期使用场景
constructor
- 用于初始化内部状态
- 唯一可以直接修改state的地方
getDerivedStateFromProps
- 当state需要从props初始化时使用
- 尽量不要使用:维护两者状态一致性会增加复杂度
- 每次render都会调用
- 典型场景:表单控件获取默认值
componentDidMount
- UI渲染完成后调用
- 只执行一次
- 典型场景:获取外部资源、数据
componentWillUnmount
- 组件移除时被调用
- 典型场景:资源释放
getSnapshotBeforeUpdate
- 在页面render之前调用,state已更新
- 典型场景:获取render之前的DOM状态
componentDidUpdate
- 每次UI更新时被调用
- 典型场景:页面需要根据props变化重新获取数据
shouldComponentUpdate(手动判断更新)
- 决定Virtual DOM是否要重绘
- 一般可以由PureComponent自动实现
- 典型场景:性能优化
常用常考
- 请求数据 ajax constructor onClick 任何步骤都可以 componentDidmount()
- 更新数据 onClick componentDidmount()只会挂载一次
- 事件监听
- 初始化state constructor
常考
-
shouldComponentUpdate(){ return false; } 阻止更新,允许我们手动的判断是否要进行组件的更新,根据组件的应用场景设置函数的合理返回值能够帮我们避免不必要的更新。性能优化
-
在生命周期的哪一步你应该发起AJAX请求
componentDidMount()
网友评论