79 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | ||
| title: Manage Updates with Lifecycle Methods
 | ||
| localeTitle: Управление обновлениями с помощью методов жизненного цикла
 | ||
| ---
 | ||
| ## Управление обновлениями с помощью методов жизненного цикла
 | ||
| 
 | ||
| Эта задача состоит в том, что вы создаете пару функций жизненного цикла, componentWillUpdate и ComponentWillReceiveProps. Вам будет предоставлена другая функция componentDidUpdate. Мы обсудим, как вы используете их на каждом этапе жизненного цикла компонента, и почему вы должны использовать их, когда проверяете разные этапы своего компонента.
 | ||
| 
 | ||
| Давайте поговорим о функциях и о том, как вы будете их использовать. Жизненные циклы компонентов можно разбить на 4 этапа. Initlization -> Mounting -> Updating -> Unmounting. Компоненты, с которыми вы будете работать, будут находиться на этапе обновления.
 | ||
| 
 | ||
| Происхождение, в котором эти функции вызывают, выглядит следующим образом: componentWillReceiveProps -> componentWillUpdate -> componentDidUpdate
 | ||
| 
 | ||
| Когда вы создаете компонент componentWillReceiveProps, эта функция проверяет, есть ли новые реквизиты. Если компонент получил новые реквизиты, тогда функция будет вызываться, и внутри блока вы можете сравнить два состояния prop. Функция будет принимать аргумент, обычно называемый nextProps, и будет сравнивать его с this.props. Задача состоит в том, что вы создаете эту функцию, используя переданный аргумент nextProps. См. Приведенную ниже функцию.
 | ||
| 
 | ||
| Затем в компоненте жизненного цикла компонента будет вызван компонентWillUpdate, эта функция проверит, были ли какие-либо обновления для реквизита или состояния и вызывается перед отображением компонента. Задача уже предоставила вам эту функцию, и она выйдет из системы «Компонент собирается обновить».
 | ||
| 
 | ||
| Как только компонент пройдет через фазу componentWillUpdate и компонент отобразит, будет вызван компонентDidUpdate. На этом этапе вы можете вызвать this.setState для обновления любых состояний chanegs, которые произошли в течение первых двух фаз. Примечание: вы можете вызвать setState, только если вы завершите условие. Поскольку эта проблема только вы поцарапаете поверхность, они хотели бы, чтобы вы вышли из системы, что «Компонент обновлен».
 | ||
| 
 | ||
| После того, как вы внедрили все функции жизненного цикла, вы увидите некоторые отображаемые на экране консольные журналы. Сначала вы увидите, что componentWillReceiveProps отправит вам this.props и nextProps. Затем вы увидите консольный журнал, в котором вы узнаете, что componentWillUpdate. Наконец, после того, как компонент отобразит, он вызовет компонентDidUpdate и выйдет из системы, «Компонент обновился».
 | ||
| 
 | ||
| Примечание. Компоненты, которые вы создаете, устарели и будут доступны для использования до версии 17. Дополнительные сведения об этих функциях можно найти в разделе ресурсов ниже.
 | ||
| 
 | ||
| ```javascript
 | ||
| class Dialog extends React.Component { 
 | ||
|   constructor(props) { 
 | ||
|     super(props); 
 | ||
|   } 
 | ||
|   componentWillUpdate() { 
 | ||
|     console.log('Component is about to update...'); 
 | ||
|   } 
 | ||
|   // change code below this line 
 | ||
|  
 | ||
|   // Create componentWillReceiveProps 
 | ||
|   // Pass in argument nextProps and log out the current prop and next prop 
 | ||
|   componentWillReceiveProps(nextProps) { 
 | ||
|     // Log the current property and the next property 
 | ||
|     console.log(this.props, nextProps) 
 | ||
|   } 
 | ||
|  
 | ||
|   // Create function componentDidUpdate 
 | ||
|   // Log out that the component has updated 
 | ||
|   componentDidUpdate() { 
 | ||
|     console.log("Component has updated") 
 | ||
|   } 
 | ||
|  
 | ||
|   // change code above this line 
 | ||
|   render() { 
 | ||
|     return <h1>{this.props.message}</h1> 
 | ||
|   } 
 | ||
|  }; 
 | ||
|  
 | ||
|  class Controller extends React.Component { 
 | ||
|   constructor(props) { 
 | ||
|     super(props); 
 | ||
|     this.state = { 
 | ||
|       message: 'First Message' 
 | ||
|     }; 
 | ||
|     this.changeMessage = this.changeMessage.bind(this); 
 | ||
|   } 
 | ||
|   changeMessage() { 
 | ||
|     this.setState({ 
 | ||
|       message: 'Second Message' 
 | ||
|     }); 
 | ||
|   } 
 | ||
|   render() { 
 | ||
|     return ( 
 | ||
|       <div> 
 | ||
|         <button onClick={this.changeMessage}>Update</button> 
 | ||
|         <Dialog message={this.state.message}/> 
 | ||
|       </div> 
 | ||
|     ); 
 | ||
|   } 
 | ||
|  }; 
 | ||
| ```
 | ||
| 
 | ||
| ### Ресурсы
 | ||
| 
 | ||
| *   [Реагировать жизненный цикл компонентов](https://reactjs.org/docs/react-component.html#the-component-lifecycle)
 | ||
| *   [Реагирование жизненного цикла компонентов](https://cdn-images-1.medium.com/max/2000/1*sn-ftowp0_VVRbeUAFECMA.png) |