首頁 >web前端 >前端問答 >react的生命週期函數有哪些

react的生命週期函數有哪些

藏色散人
藏色散人原創
2023-01-03 10:15:474542瀏覽

react的生命週期函數有:1、componentWillMount函數;2、componentDidMount函數;3、shouldComponentUpdate函數;4、componentWillUpdate函數;5、componentDidUpdate函數;6、componentWillUnmounts;7、componentWillReceiveProps函數。

react的生命週期函數有哪些

本教學操作環境:Windows10系統、react18.0.0版、Dell G3電腦。

react的生命週期函數有哪些?

react的生命週期函數(超詳細)

話不多說,直接進入正題!

先來了解react的生命週期函數有哪些:

  • #元件會掛載時觸發的函數:componentWillMount

  • #元件掛載完成時觸發的函數:componentDidMount

  • #是否要更新資料時觸發的函數:shouldComponentUpdate

  • 將要更新資料時觸發的函數:componentWillUpdate

  • 資料更新完成時觸發的函數:componentDidUpdate

  • 元件會銷毀時觸發的函數:componentWillUnmount

  • #父元件中改變了props傳值時觸發的函數:componentWillReceiveProps

#下面來上程式碼詳細說明

一.掛載部分
根據官方生命週期圖我們可以看到,一個元件的載入渲染,首先是defaultProps和propsTypes,(這兩個是什麼下一篇會單獨說,這裡也不是重點)
然後就是constructor及this.state裡的初始資料,所以到這裡是第一步。接著就是componentWillMount 元件將要開始掛載了,也就是第二步。然後元件掛載,render解析渲染,所以第三步呼之欲出,就是render資料都渲染完成,最後componentDidMount
元件掛載完成。

子元件程式碼,父元件內引入渲染即可(這裡先不上程式碼)

import React ,{Component} from 'react'

class Smzq extends Component{
	constructor(props){
		console.log('01构造函数')		
		super(props)
		this.state={
			
		}
	}
	//组件将要挂载时候触发的生命周期函数
	componentWillMount(){
		console.log('02组件将要挂载')
	}
	//组件挂载完成时候触发的生命周期函数
	componentDidMount(){
		console.log('04组件将要挂载')
	}
	render(){
		console.log('03数据渲染render')
		return(
			<div>
				生命周期函数演示
			</div>
		) 
	}
}
export default Smzq

開啟控制台查看
react的生命週期函數有哪些

二.資料更新部分
資料更新的話第一步是shouldComponentUpdate確認是否要更新資料,當這個函數傳回的是true的時候才會進行更新,而這個函數可以宣告兩個參數nextPropsnextState
nextProps是父元件傳給子元件的值,nextState是資料更新之後值,這兩個值可以在這個函數中取得。 第二步當確認更新資料之後componentWillUpdate將要更新資料,第三步依舊是render,資料改變render重新進行了渲染。第四步是componentDidUpdate資料更新完成

程式碼的話子元件在上一部分的基礎上,在this.state中定義一個初始數據,render中綁定一下這個數據,之後再增加一個按鈕聲明一個onClick事件去改變這個數據。這樣可以看到資料更新部分的效果,我這裡把第一部分的程式碼刪掉了,看著不那麼亂。

import React ,{Component} from 'react'

class Smzq extends Component{
	constructor(props){
		super(props)
		this.state={
			msg:'我是一个msg数据'
		}
	}
	//是否要更新数据,如果返回true才会更新数据
	shouldComponentUpdate(nextProps,nextState){
		console.log('01是否要更新数据')
		console.log(nextProps)		//父组件传给子组件的值,这里没有会显示空
		console.log(nextState)		//数据更新后的值
		return true;				//返回true,确认更新
	}
	//将要更新数据的时候触发的
	componentWillUpdate(){
		console.log('02组件将要更新')
	}
	//更新数据时候触发的生命周期函数
	componentDidUpdate(){
		console.log('04组件更新完成')
	}
	//更新数据
	setMsg(){
		this.setState({
			msg:'我是改变后的msg数据'
		})
	}
	render(){
		console.log('03数据渲染render')
		return(
			<div>
				{this.state.msg}
				<br>
				<hr>
				<button>this.setMsg()}>更新msg的数据</button>
			</div>
		) 
	}
}
export default Smzq

react的生命週期函數有哪些

三.單獨說一下componentWillReceiveProps,父元件中改變了props傳值時觸發的函數
這個函數也就是當我們父元件給子元件傳值的時候改變了props的值時觸發的函數,剛才在第二部分也說到shouldComponentUpdate這個函數可以攜帶兩個參數,nextProps就是父元件傳給子元件的值
在父元件中定義一個初始title數據,寫一個按鈕宣告一個onClick事件去改變這個title

#四.componentWillUnmount元件會銷毀時的函數
在父元件中定義一個flag為true的狀態值,加上一個按鈕宣告一個onClick事件去
更改這個flag實作銷毀元件。

父元件程式碼:

import React, { Component } from 'react';
import Smzq from './components/Smzq'

class App extends Component {
	constructor(props){
		super(props)
		this.state={
			flag:true,
			title:"我是app组件的标题"
		}
	}
	//创建/销毁组件
	setFlag(){
		this.setState({
			flag:!this.state.flag
		})
	}
	//改变title
	setTitle(){
		this.setState({
			title:'我是app组件改变后的title'
		})
	}
  	render() {
	    return (
	      <div>
				{
					this.state.flag?<smzq></smzq>:''
				}
				<button>this.setFlag()}>挂载/销毁生命周期函数组件</button>
				<button>this.setTitle()}>改变app组件的title</button>
	      </div>
	    );
 	}
}
export default App;

子元件完整程式碼:

import React ,{Component} from 'react'

class Smzq extends Component{
	constructor(props){
		super(props)
		this.state={
			msg:'我是一个msg数据'
		}
	}
	//组件将要挂载时候触发的生命周期函数
	componentWillMount(){
		console.log('02组件将要挂载')
	}
	//组件挂载完成时候触发的生命周期函数
	componentDidMount(){
		//Dom操作,请求数据放在这个里面
		console.log('04组件挂载完成')
	}
	//是否要更新数据,如果返回true才会更新数据
	shouldComponentUpdate(nextProps,nextState){
		console.log('01是否要更新数据')
		console.log(nextProps)		//父组件传给子组件的值,这里没有会显示空
		console.log(nextState)		//数据更新后的值
		return true;				//返回true,确认更新
	}
	//将要更新数据的时候触发的
	componentWillUpdate(){
		console.log('02组件将要更新')
	}
	//更新数据时候触发的生命周期函数
	componentDidUpdate(){
		console.log('04组件更新完成')
	}
	//你在父组件里面改变props传值的时候触发的函数
	componentWillReceiveProps(){
		console.log('父子组件传值,父组件里面改变了props的值触发的方法')
	}
	setMsg(){
		this.setState({
			msg:'我是改变后的msg数据'
		})
	}
	//组件将要销毁的时候触发的生命周期函数,用在组件销毁的时候执行操作
	componentWillUnmount(){
		console.log('组件销毁了')
	}
	render(){
		console.log('03数据渲染render')
		return(
			<div>
				生命周期函数演示--{this.state.msg}--{this.props.title}
				<br>
				<hr>
				<button>this.setMsg()}>更新msg的数据</button>
			</div>
		) 
	}
}
export default Smzq

点击挂载/销毁生命周期函数组件这个按钮的时候
子组件消失,控制台打印:组件销毁了。

当父组件给子组件传值时
react的生命週期函數有哪些

这里nextProps这个就有上图划红线的值了。
那么我们再点击改变app组件的title这个按钮

react的生命週期函數有哪些

这里可以看到componentWillReceiveProps这个函数被触发了,nextProps这个值也发生了改变。

到这里就全部结束了,可能写的不够清晰,不知道有没有人能看完,over。

推荐学习:《react视频教程

以上是react的生命週期函數有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn