在本章中,我們將討論組件生命周期方法。
componentWillMount
在渲染之前在服務(wù)器和客戶端上均已執(zhí)行。
componentDidMount
僅在客戶端執(zhí)行第一個(gè)渲染之后執(zhí)行。這是應(yīng)該進(jìn)行AJAX請(qǐng)求和DOM或狀態(tài)更新的地方。此方法還用于與其他JavaScript框架以及延遲執(zhí)行的任何函數(shù)(例如setTimeout
或)集成setInterval
。我們正在使用它來更新狀態(tài),以便我們可以觸發(fā)其他生命周期方法。
componentWillReceiveProps
道具更新后立即調(diào)用,然后調(diào)用另一個(gè)渲染器。我們是從setNewNumber
更新狀態(tài)時(shí)觸發(fā)的。
shouldComponentUpdate
應(yīng)該返回true
或false
值。這將確定組件是否將被更新。true
默認(rèn)情況下設(shè)置為。如果您確定組件不需要在更新后state
或props
更新后呈現(xiàn),則可以返回false
值。
componentWillUpdate
在渲染之前被調(diào)用。
componentDidUpdate
在渲染后立即調(diào)用。
componentWillUnmount
從dom卸下組件后調(diào)用。我們正在中卸載組件main.js
。
在下面的示例中,我們將state
在構(gòu)造函數(shù)中設(shè)置初始值。將setNewnumber
用于更新的state
。所有生命周期方法都在Content組件內(nèi)部。
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;
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);
初始渲染后,我們將獲得以下屏幕。