鍍金池/ 教程/ HTML/ ReactJS組件生命周期
ReactJS動畫
ReactJS組件狀態(tài)(State)
ReactJS簡介
ReactJS開發(fā)環(huán)境設(shè)置
ReactJS Refs
ReactJS組件API
ReactJS高階組件
ReactJS組件
ReactJS props簡介
ReactJS教程
ReactJS組件生命周期
ReactJS鍵(Key)
ReactJS事件
ReactJS最佳實踐
ReactJS props驗證
ReactJS表單
ReactJS JSX
ReactJS路由器
ReactJS通量概念

ReactJS組件生命周期

在本章中,我們來了解組件生命周期方法。

生命周期方法

  • componentWillMount - 在渲染之前在服務(wù)器端和客戶端執(zhí)行。
  • componentDidMount - 僅在客戶端的第一次渲染之后執(zhí)行。 這是AJAX請求和DOM或狀態(tài)更新應(yīng)該發(fā)生的地方。此方法也用于與其他JavaScript框架以及任何延遲執(zhí)行的函數(shù)(如setTimeoutsetInterval)進行集成,在這里使用它來更新狀態(tài),以便我們可以觸發(fā)其他生命周期方法。
  • componentWillReceiveProps - 只要在另一個渲染被調(diào)用之前更新props就被調(diào)用。 當(dāng)我們更新狀態(tài)時,從setNewNumber觸發(fā)它。
  • shouldComponentUpdate - 應(yīng)該返回truefalse值。 這將決定組件是否將被更新。 默認(rèn)設(shè)置為true。 如果確定組件在stateprops更新后不需要渲染,則可以返回false值。
  • componentWillUpdate - 在渲染之前被調(diào)用。
  • componentDidUpdate - 在渲染之后被調(diào)用。
  • componentWillUnmount - 在從dom卸載組件后被調(diào)用,也就是卸載main.js中的組件。

在下面的例子中,將在構(gòu)造函數(shù)中設(shè)置初始狀態(tài)。 setNewnumber用于更新狀態(tài)。 所有生命周期方法都在內(nèi)容組件中。

文件:App.jsx -

import React from 'react';

class App extends React.Component {
   constructor(props) {
      super(props);

      this.state = {
         data: 0
      }
      this.setNewNumber = this.setNewNumber.bind(this)
   };
   setNewNumber() {
      this.setState({data: this.state.data + 1})
   }
   render() {
      return (
         <div>
            <button onClick = {this.setNewNumber}>INCREMENT</button>
            <Content myNumber = {this.state.data}></Content>
         </div>
      );
   }
}
class Content extends React.Component {
   componentWillMount() {
      console.log('Component WILL MOUNT!')
   }
   componentDidMount() {
      console.log('Component DID MOUNT!')
   }
   componentWillReceiveProps(newProps) {    
      console.log('Component WILL RECIEVE PROPS!')
   }
   shouldComponentUpdate(newProps, newState) {
      return true;
   }
   componentWillUpdate(nextProps, nextState) {
      console.log('Component WILL UPDATE!');
   }
   componentDidUpdate(prevProps, prevState) {
      console.log('Component DID UPDATE!')
   }
   componentWillUnmount() {
      console.log('Component WILL UNMOUNT!')
   }
   render() {
      return (
         <div>
            <h3>{this.props.myNumber}</h3>
         </div>
      );
   }
}
export default App;

文件:main.js -

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';

ReactDOM.render(<App/>, document.getElementById('app'));

setTimeout(() => {
   ReactDOM.unmountComponentAtNode(document.getElementById('app'));}, 10000);

初始渲染之后,應(yīng)該會得到如下演示效果 -

只有componentWillMountcomponentDidMount將被記錄在控制臺中,因為還沒有更新任何東西。

當(dāng)點擊INCREMENT按鈕時,將發(fā)生更新,并觸發(fā)其他生命周期方法。

十秒鐘后,組件將被卸載,最后一個事件將被記錄在控制臺中。

注 - 生命周期方法將始終以相同的順序調(diào)用,因此按照示例中所示的正確順序編寫生命周期方法是一種很好的做法。


上一篇:ReactJS props簡介下一篇:ReactJS簡介