您好,登錄后才能下訂單哦!
這篇文章主要介紹了React組件的常用生命周期函數(shù)怎么使用的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇React組件的常用生命周期函數(shù)怎么使用文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
意義:組件的生命周期有助于理解組件的運(yùn)行方式、完成更復(fù)雜的組件功能、分析組件錯(cuò)誤原因等。
組件的生命周期:組件從被創(chuàng)建到掛載到頁(yè)面中運(yùn)行,再到組件不用時(shí)卸載的過(guò)程。
生命周期的每個(gè)階段總是伴隨著一些方法調(diào)用,這些方法就是生命周期的鉤子函數(shù)。
鉤子函數(shù)的作用:為開(kāi)發(fā)人員在不同階段操作組件提供了時(shí)機(jī)。
只有類組件才有生命周期。
每個(gè)階段的執(zhí)行時(shí)機(jī)
每個(gè)階段鉤子函數(shù)的執(zhí)行順序
每個(gè)階段鉤子函數(shù)的作用
執(zhí)行時(shí)機(jī):組件創(chuàng)建時(shí)(頁(yè)面加載時(shí))
執(zhí)行順序:constructor() -> render() -> componentDidMount()
鉤子函數(shù)的作用:
鉤子函數(shù) | 觸發(fā)時(shí)機(jī) | 作用 |
---|---|---|
constructor | 創(chuàng)建組件時(shí),最先執(zhí)行 | 1.初始化state 2.為事件處理程序綁定 this |
render | 每次組件渲染都會(huì)觸發(fā) | 渲染 UI (注意:不能調(diào)用setState()) |
componentDidMount | 組件掛載(完成 DOM 渲染)后 | 1.發(fā)送網(wǎng)絡(luò)請(qǐng)求 2.DOM 操作 |
// 導(dǎo)入ract import React from 'react' import ReactDOM from 'react-dom' class App extends React.Component { constructor(props) { super(props) // 1.初始化state this.state = { count: 0 } // 2.解決事件處理程序this指向問(wèn)題 this.handleClick = this.handleClick.bind(this) console.warn('生命周期鉤子函數(shù):constructor') } componentDidMount() { // 1.發(fā)送ajax請(qǐng)求,獲取遠(yuǎn)程數(shù)據(jù) // axios.get('http://api....') // 2.進(jìn)行DOM操作 const title = document.getElementById('title') console.log(title) console.warn('生命周期鉤子函數(shù):componentDidMount') } // 事件處理程序 handleClick() { this.setState({ count: 1 }) } render() { console.warn('生命周期鉤子函數(shù):render') // 錯(cuò)誤演示(不能調(diào)用setState()) // this.setState({ // count: 2 // }) return ( <div> <h2 id='title'>統(tǒng)計(jì)豆豆被打的次數(shù):{this.state.count}</h2> <button id='btn' onClick={this.handleClick}>打豆豆</button> </div> ) } } ReactDOM.render(<App />, document.getElementById('root'))
執(zhí)行時(shí)機(jī):setState()、forceUpdate()、組件接收到新的props。
說(shuō)明:以上任意一種變化,組件就會(huì)重新渲染。
執(zhí)行順序:render() -> componentDidUpdate()
鉤子函數(shù) | 觸發(fā)時(shí)機(jī) | 作用 |
---|---|---|
render | 每次組件渲染都會(huì)觸發(fā) | 渲染 UI (與掛載階段是同一個(gè)render) |
componentDidUpdate | 組件更新(完成 DOM 渲染)后 | 1.發(fā)送網(wǎng)絡(luò)請(qǐng)求 2.DOM 操作 注意:如果要 setState() 必須放在一個(gè)if條件中 |
// 導(dǎo)入ract import React from 'react' import ReactDOM from 'react-dom' // 父組件 class App extends React.Component { constructor(props) { super(props) this.state = { count: 0 } } // 事件處理程序 handleClick = () => { // 執(zhí)行時(shí)機(jī):setState() this.setState({ count: this.state.count + 1 }) // 執(zhí)行時(shí)機(jī):強(qiáng)制更新 // this.forceUpdate() } render() { return ( <div> {/* 執(zhí)行時(shí)機(jī):組件接收到新的props */} <ShowCount count={this.state.count} /> <button onClick={this.handleClick}>打豆豆</button> </div> ) } } // 子組件 class ShowCount extends React.Component { render() { console.warn('組件ShowCount的生命周期鉤子函數(shù):render') return (<h2 id='title'>統(tǒng)計(jì)豆豆被打的次數(shù):{this.props.count}</h2>) } // 注意:如果要調(diào)用 setState() 更新?tīng)顟B(tài),必須要放在一個(gè) if 條件中 // 因?yàn)椋喝绻苯诱{(diào)用 setState(),也會(huì)導(dǎo)致遞歸更新!?。? componentDidUpdate(prevProps) { // componentDidUpdate的作用:獲取DOM const title = document.getElementById('title') console.log(title) // 正確做法:比較更新前后的props是否相同,來(lái)決定是否重新渲染組件 console.log('上一次的props:', prevProps, ',當(dāng)前的props:', this.props) if (prevProps.count !== this.props.count) { this.setState({}) // componentDidUpdate的作用:發(fā)送ajax請(qǐng)求數(shù)據(jù) // axios.get('http://api....') } // 錯(cuò)誤演示 // this.setState({}) console.warn('組件ShowCount的生命周期鉤子函數(shù):componentDidUpdate') } } ReactDOM.render(<App />, document.getElementById('root'))
執(zhí)行時(shí)機(jī):組件從頁(yè)面中消失
鉤子函數(shù) | 觸發(fā)時(shí)機(jī) | 作用 |
---|---|---|
componentWillUnmount | 組件卸載(從頁(yè)面中消失) | 執(zhí)行清理工作(比如:清理定時(shí)器等) |
// 導(dǎo)入ract import React from 'react' import ReactDOM from 'react-dom' // 父組件 class App extends React.Component { constructor(props) { super(props) this.state = { count: 0 } } // 事件處理程序 handleClick = () => { this.setState({ count: this.state.count + 1 }) } render() { return ( <div> { this.state.count > 5 ? <p>豆豆被打死了</p> : <ShowCount count={this.state.count} /> } <button onClick={this.handleClick}>打豆豆</button> </div> ) } } // 子組件 class ShowCount extends React.Component { componentDidMount() { this.timerId = setInterval(() => { console.log('定時(shí)器正在執(zhí)行~') }, 500) } render() { return (<h2 id='title'>統(tǒng)計(jì)豆豆被打的次數(shù):{this.props.count}</h2>) } componentWillUnmount() { console.warn('組件ShowCount的生命周期鉤子函數(shù):componentWillUnmount') // 清理定時(shí)器 clearInterval(this.timerId) } } ReactDOM.render(<App />, document.getElementById('root'))
關(guān)于“React組件的常用生命周期函數(shù)怎么使用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“React組件的常用生命周期函數(shù)怎么使用”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。