--- id: 5a24c314108439a4d403617f title: Manage Updates with Lifecycle Methods challengeType: 6 isRequired: false videoUrl: '' localeTitle: Gerenciar atualizações com métodos de ciclo de vida --- ## Description
Outro método de ciclo de vida é o componentWillReceiveProps() que é chamado sempre que um componente recebe novos props. Esse método recebe os novos props como um argumento, que geralmente é escrito como nextProps . Você pode usar esse argumento e comparar com this.props e executar ações antes das atualizações do componente. Por exemplo, você pode chamar setState() localmente antes que a atualização seja processada. Outro método é componentDidUpdate() e é chamado imediatamente depois que um componente é renderizado novamente. Observe que renderização e montagem são consideradas coisas diferentes no ciclo de vida do componente. Quando uma página é carregada pela primeira vez, todos os componentes são montados e é onde os métodos como componentWillMount() e componentDidMount() são chamados. Depois disso, conforme o estado muda, os componentes se re-renderizam. O próximo desafio cobre isso com mais detalhes.
## Instructions
O componente filho Dialog recebe message de seu pai, o componente Controller . Escreva o método componentWillReceiveProps() no componente Dialog e faça com que ele registre this.props e nextProps no console. Você precisará passar nextProps como um argumento para esse método e, embora seja possível nomear qualquer coisa, nomeie-o em nextProps , nextProps aqui. Em seguida, adicione componentDidUpdate() no componente Dialog e registre uma instrução que diz que o componente foi atualizado. Esse método funciona de maneira semelhante ao componentWillUpdate() , que é fornecido para você. Agora clique no botão para alterar a mensagem e assistir ao console do seu navegador. A ordem das instruções do console mostra a ordem em que os métodos são chamados. Nota: Você precisará gravar os métodos de ciclo de vida como funções normais e não como funções de seta para passar nos testes (também não há vantagem em escrever métodos de ciclo de vida como funções de seta).
## Tests
```yml tests: - text: O componente Controller deve renderizar o componente Dialog como um filho. testString: 'assert((function() { const mockedComponent = Enzyme.mount(React.createElement(Controller)); return mockedComponent.find("Controller").length === 1 && mockedComponent.find("Dialog").length === 1; })(), "The Controller component should render the Dialog component as a child.");' - text: O método componentWillReceiveProps no componente Dialog deve registrar this.props no console. testString: 'assert((function() { const lifecycleChild = React.createElement(Dialog).type.prototype.componentWillReceiveProps.toString().replace(/ /g,""); return lifecycleChild.includes("console.log") && lifecycleChild.includes("this.props") })(), "The componentWillReceiveProps method in the Dialog component should log this.props to the console.");' - text: O método componentWillReceiveProps no componente Dialog deve registrar nextProps no console. testString: 'assert((function() { const lifecycleChild = React.createElement(Dialog).type.prototype.componentWillReceiveProps.toString().replace(/ /g,""); const nextPropsAsParameterTest = /componentWillReceiveProps(| *?= *?)(\(|)nextProps(\)|)( *?=> *?{| *?{|{)/; const nextPropsInConsoleLogTest = /console\.log\(.*?nextProps\b.*?\)/; return ( lifecycleChild.includes("console.log") && nextPropsInConsoleLogTest.test(lifecycleChild) && nextPropsAsParameterTest.test(lifecycleChild) ); })(), "The componentWillReceiveProps method in the Dialog component should log nextProps to the console.");' - text: O componente Dialog deve chamar o método componentDidUpdate e registrar uma mensagem no console. testString: 'assert((function() { const lifecycleChild = React.createElement(Dialog).type.prototype.componentDidUpdate.toString().replace(/ /g,""); return lifecycleChild.length !== "undefined" && lifecycleChild.includes("console.log"); })(), "The Dialog component should call the componentDidUpdate method and log a message to the console.");' ```
## Challenge Seed
```jsx class Dialog extends React.Component { constructor(props) { super(props); } componentWillUpdate() { console.log('Component is about to update...'); } // change code below this line // change code above this line render() { return

{this.props.message}

} }; 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 (
); } }; ```
### After Test
```js console.info('after the test'); ```
## Solution
```js // solution required ```