<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
勾點函數 | 觸發時機 | 作用 |
---|---|---|
constructor | 建立元件時,最先執行 | 1.初始化state 2.為事件處理程式繫結 this |
render | 每次元件渲染都會觸發 | 渲染 UI (注意:不能呼叫setState()) |
componentDidMount | 元件掛載(完成 DOM 渲染)後 | 1.傳送網路請求 2.DOM 操作 |
// 匯入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指向問題 this.handleClick = this.handleClick.bind(this) console.warn('生命週期勾點函數:constructor') } componentDidMount() { // 1.傳送ajax請求,獲取遠端資料 // axios.get('http://api....') // 2.進行DOM操作 const title = document.getElementById('title') console.log(title) console.warn('生命週期勾點函數:componentDidMount') } // 事件處理程式 handleClick() { this.setState({ count: 1 }) } render() { console.warn('生命週期勾點函數:render') // 錯誤演示(不能呼叫setState()) // this.setState({ // count: 2 // }) return ( <div> <h1 id='title'>統計豆豆被打的次數:{this.state.count}</h1> <button id='btn' onClick={this.handleClick}>打豆豆</button> </div> ) } } ReactDOM.render(<App />, document.getElementById('root'))
勾點函數 | 觸發時機 | 作用 |
---|---|---|
render | 每次元件渲染都會觸發 | 渲染 UI (與掛載階段是同一個render) |
componentDidUpdate | 元件更新(完成 DOM 渲染)後 | 1.傳送網路請求 2.DOM 操作 注意:如果要 setState() 必須放在一個if條件中 |
// 匯入ract import React from 'react' import ReactDOM from 'react-dom' // 父元件 class App extends React.Component { constructor(props) { super(props) this.state = { count: 0 } } // 事件處理程式 handleClick = () => { // 執行時機:setState() this.setState({ count: this.state.count + 1 }) // 執行時機:強制更新 // this.forceUpdate() } render() { return ( <div> {/* 執行時機:元件接收到新的props */} <ShowCount count={this.state.count} /> <button onClick={this.handleClick}>打豆豆</button> </div> ) } } // 子元件 class ShowCount extends React.Component { render() { console.warn('元件ShowCount的生命週期勾點函數:render') return (<h1 id='title'>統計豆豆被打的次數:{this.props.count}</h1>) } // 注意:如果要呼叫 setState() 更新狀態,必須要放在一個 if 條件中 // 因為:如果直接呼叫 setState(),也會導致遞迴更新!!! componentDidUpdate(prevProps) { // componentDidUpdate的作用:獲取DOM const title = document.getElementById('title') console.log(title) // 正確做法:比較更新前後的props是否相同,來決定是否重新渲染元件 console.log('上一次的props:', prevProps, ',當前的props:', this.props) if (prevProps.count !== this.props.count) { this.setState({}) // componentDidUpdate的作用:傳送ajax請求資料 // axios.get('http://api....') } // 錯誤演示 // this.setState({}) console.warn('元件ShowCount的生命週期勾點函數:componentDidUpdate') } } ReactDOM.render(<App />, document.getElementById('root'))
執行時機:元件從頁面中消失
勾點函數 | 觸發時機 | 作用 |
---|---|---|
componentWillUnmount | 元件解除安裝(從頁面中消失) | 執行清理工作(比如:清理定時器等) |
// 匯入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('定時器正在執行~') }, 500) } render() { return (<h1 id='title'>統計豆豆被打的次數:{this.props.count}</h1>) } componentWillUnmount() { console.warn('元件ShowCount的生命週期勾點函數:componentWillUnmount') // 清理定時器 clearInterval(this.timerId) } } ReactDOM.render(<App />, document.getElementById('root'))
到此這篇關於React 元件的常用生命週期函數彙總的文章就介紹到這了,更多相關React 元件生命週期函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45