One place for hosting & domains

      Compreendendo

      Compreendendo ações assíncronas do Redux com o Redux Thunk


      Introdução

      Por padrão, as ações do Redux são enviadas de forma síncrona, o que é um problema para todos os aplicativos não triviais que precisam se comunicar com uma API externa ou executar efeitos colaterais. O Redux também permite que middleware fique entre uma ação sendo despachada e a ação que atinge os redutores.

      Existem duas bibliotecas de middleware muito populares que permitem efeitos colaterais e ações assíncronas: Redux Thunk e Redux Saga. Neste post, você irá explorar o Redux Thunk.

      Thunk (conversão) é um conceito de programação onde uma função é usada para atrasar a avaliação/cálculo de uma operação.

      O Redux Thunk é um middleware que permite chamar criadores de ação que retornam uma função em vez de um objeto de ação. Essa função recebe o método de expedição do armazenamento, que é usado então para expedir ações síncronas regulares dentro do corpo da função assim que as operações assíncronas forem concluídas.

      Neste artigo, você irá aprender como adicionar o Redux Thunk e como ele pode se encaixar em um aplicativo Todo hipotético.

      Pré-requisitos

      Este post assume que você tenha conhecimento básico do React e do Redux. Confira este post se estiver iniciando com o Redux.

      Este tutorial é construído a partir de um aplicativo Todo hipotético que rastreia tarefas que precisam ser realizadas e foram concluídas. Assume-se que o create-react-app foi usado para gerar um novo aplicativo React, e o redux, react-redux e axios já foram instalados.

      Os detalhes mais finos sobre como criar um aplicativo Todo do zero não serão explicados aqui. Ele será apresentado como um cenário conceitual para evidenciar o Redux Thunk.

      Adicionando o redux-thunk

      Primeiro, use o terminal para navegar até o diretório do projeto e instale o pacote redux-thunk em seu projeto:

      • npm install redux-thunk@2.3.0

      Nota: o Redux Thunk possui apenas 14 linhas de código. Confira aqui o código fonte para aprender sobre como um middleware Redux funciona nos bastidores.

      Agora, aplique o middleware ao criar o armazenamento do seu aplicativo usando o applyMiddleware do Redux. Em um dado aplicativo React com redux e react-redux, seu arquivo index.js deve ficar assim:

      src/index.js

      import React from 'react';
      import ReactDOM from 'react-dom';
      import { Provider } from 'react-redux';
      import { createStore, applyMiddleware } from 'redux';
      import thunk from 'redux-thunk';
      import './index.css';
      import rootReducer from './reducers';
      import App from './App';
      import * as serviceWorker from './serviceWorker';
      
      // use applyMiddleware to add the thunk middleware to the store
      const store = createStore(rootReducer, applyMiddleware(thunk));
      
      ReactDOM.render(
        <Provider store={store}>
          <App />
        </Provider>,
        document.getElementById('root')
      );
      

      Agora, o Redux Thunk é importado e aplicado em seu aplicativo.

      Usando o Redux Thunk em um aplicativo de amostra

      O caso de uso mais comum para o Redux Thunk é para se comunicar de forma assíncrona com uma API externa para recuperar ou salvar dados. O Redux Thunk torna mais fácil expedir ações que seguem o ciclo de vida de uma solicitação para uma API externa.

      Criar um novo item de tarefa pendente normalmente envolve primeiro expedir uma ação para indicar que a criação de um item de tarefa pendente foi iniciado. Em seguida, se o item de tarefa for criado com sucesso e retornado pelo servidor externo, expedindo outra ação com o novo item de tarefa. Caso aconteça um erro e a tarefa não seja salva no servidor, uma ação com o erro pode ser expedida em vez disso.

      Vamos ver como isso seria feito usando o Redux Thunk.

      Em seu componente contêiner, importe a ação e emita-a:

      src/containers/AddTodo.js

      import { connect } from 'react-redux';
      import { addTodo } from '../actions';
      import NewTodo from '../components/NewTodo';
      
      const mapDispatchToProps = dispatch => {
        return {
          onAddTodo: todo => {
            dispatch(addTodo(todo));
          }
        };
      };
      
      export default connect(
        null,
        mapDispatchToProps
      )(NewTodo);
      

      A ação irá usar o Axios para enviar uma solicitação POST ao ponto de extremidade em JSONPlaceholder (https://jsonplaceholder.typicode.com/todos):

      src/actions/index.js

      import {
        ADD_TODO_SUCCESS,
        ADD_TODO_FAILURE,
        ADD_TODO_STARTED,
        DELETE_TODO
      } from './types';
      
      import axios from 'axios';
      
      export const addTodo = ({ title, userId }) => {
        return dispatch => {
          dispatch(addTodoStarted());
      
          axios
            .post(`https://jsonplaceholder.typicode.com/todos`, {
              title,
              userId,
              completed: false
            })
            .then(res => {
              dispatch(addTodoSuccess(res.data));
            })
            .catch(err => {
              dispatch(addTodoFailure(err.message));
            });
        };
      };
      
      const addTodoSuccess = todo => ({
        type: ADD_TODO_SUCCESS,
        payload: {
          ...todo
        }
      });
      
      const addTodoStarted = () => ({
        type: ADD_TODO_STARTED
      });
      
      const addTodoFailure = error => ({
        type: ADD_TODO_FAILURE,
        payload: {
          error
        }
      });
      

      Observe como o criador de ação addTodo retorna uma função em vez do objeto de ação regular. Essa função recebe o método de expedição do armazenamento.

      Dentro do corpo da função, envia-se primeiro uma ação síncrona imediata para o armazenamento para indicar que iniciou-se o salvamento da tarefa pendente com a API externa. Em seguida, você faz a solicitação POST real ao servidor usando o Axios. No caso de uma resposta bem-sucedida do servidor, você expede uma ação de sucesso síncrona com os dados recebidos da resposta, mas para uma resposta de falha, envia-se uma ação síncrona diferente com a mensagem de erro.

      Ao usar uma API externa, como o JSONPlaceholder neste caso, é possível ver o atraso de rede real acontecendo. No entanto, se estiver trabalhando com um servidor de backend local, as respostas de rede podem acontecer muito rapidamente para visualizar o atraso de rede que um usuário real estaria observando. Sendo assim, é possível adicionar um atraso artificial ao desenvolver:

      src/actions/index.js

      // ...
      
      export const addTodo = ({ title, userId }) => {
        return dispatch => {
          dispatch(addTodoStarted());
      
          axios
            .post(ENDPOINT, {
              title,
              userId,
              completed: false
            })
            .then(res => {
              setTimeout(() => {
                dispatch(addTodoSuccess(res.data));
              }, 2500);
            })
            .catch(err => {
              dispatch(addTodoFailure(err.message));
            });
        };
      };
      
      // ...
      

      Para testar cenários de erro, emita manualmente um erro:

      src/actions/index.js

      // ...
      
      export const addTodo = ({ title, userId }) => {
        return dispatch => {
          dispatch(addTodoStarted());
      
          axios
            .post(ENDPOINT, {
              title,
              userId,
              completed: false
            })
            .then(res => {
              throw new Error('addToDo error!');
              // dispatch(addTodoSuccess(res.data));
            })
            .catch(err => {
              dispatch(addTodoFailure(err.message));
            });
        };
      };
      
      // ...
      

      Para fins didáticos, aqui está um exemplo de como o redutor de tarefa pendente poderia ser para lidar com o ciclo de vida completo da solicitação:

      src/reducers/todosReducer.js

      import {
        ADD_TODO_SUCCESS,
        ADD_TODO_FAILURE,
        ADD_TODO_STARTED,
        DELETE_TODO
      } from '../actions/types';
      
      const initialState = {
        loading: false,
        todos: [],
        error: null
      };
      
      export default function todosReducer(state = initialState, action) {
        switch (action.type) {
          case ADD_TODO_STARTED:
            return {
              ...state,
              loading: true
            };
          case ADD_TODO_SUCCESS:
            return {
              ...state,
              loading: false,
              error: null,
              todos: [...state.todos, action.payload]
            };
          case ADD_TODO_FAILURE:
            return {
              ...state,
              loading: false,
              error: action.payload.error
            };
          default:
            return state;
        }
      }
      

      Explorando o getState

      Além de receber o método de expedição do estado, a função retornada por um criador de ação assíncrona com o Redux Thunk também recebe o método getState do armazenamento, de forma que os valores atuais do armazenamento possam ser lidos:

      src/actions/index.js

      export const addTodo = ({ title, userId }) => {
        return (dispatch, getState) => {
          dispatch(addTodoStarted());
      
          console.log('current state:', getState());
      
          // ...
        };
      };
      

      Com o código acima, o estado atual será impresso no console.

      Por exemplo:

      {loading: true, todos: Array(1), error: null}
      

      Usar o getState pode ser útil para lidar com as coisas de maneira diferente dependendo do estado atual. Por exemplo, se quiser limitar o aplicativo a apenas quatro itens de tarefa por vez, você pode retornar da função se o estado já possuir a quantidade máxima de itens de tarefa:

      src/actions/index.js

      export const addTodo = ({ title, userId }) => {
        return (dispatch, getState) => {
          const { todos } = getState();
      
          if (todos.length > 4) return;
      
          dispatch(addTodoStarted());
      
          // ...
        };
      };
      

      Com o código acima, o aplicativo ficará limitado a quatro itens de tarefa.

      Conclusão

      Neste tutorial, você explorou adicionar o Redux Thunk a um aplicativo React para permitir a expedição de ações de maneira assíncrona. Isso é útil ao usar um armazenamento Redux e APIs externas.

      Se quiser aprender mais sobre o React, dê uma olhada em nossa série Como programar no React.js, ou confira nossa página do tópico React para exercícios e projetos de programação.



      Source link

      Compreendendo como renderizar matrizes no React


      Introdução

      Este artigo irá ensinar como renderizar uma matriz no React, além das melhores práticas para usar ao renderizar diferentes elementos dentro de componentes.

      Uma das vantagens de usar uma linguagem Web moderna como o JavaScript é a possibilidade de automatizar rapidamente a geração de porções de HTML.

      Usar algo como um loop em uma matriz ou um objeto significa que só é necessário escrever o HTML uma vez por item. Melhor ainda, qualquer edição futura precisaria ser aplicada apenas uma vez.

      Renderizando vários elementos

      Para renderizar vários elementos JSX no React, você pode percorrer uma matriz com um loop com o método .map() e retornar um único elemento.

      Abaixo, um loop é usado em uma matriz reptiles e um elemento li é retornado para cada item nela. Use este método quando quiser exibir um único elemento para cada item na matriz:

      function ReptileListItems() {
        const reptiles = ["alligator", "snake", "lizard"];
      
        return reptiles.map((reptile) => <li>{reptile}</li>);
      }
      

      O resultado ficará parecido com este:

      Output

      - alligator - snake - lizard

      No exemplo a seguir, você irá examinar por que adicionar uma key única a uma lista de elementos renderizados por uma matriz.

      Renderizando uma coleção de elementos dentro de um componente

      Neste exemplo, você percorre uma matriz com um loop e cria uma série de componentes de item de lista como no exemplo anterior.

      Para iniciar, atualize o código a fim de usar o componente <ol> e manter os itens <li>. O componente <ol> irá criar uma lista ordenada dos itens:

      function ReptileList() {
        const reptiles = ["alligator", "snake", "lizard"];
      
        return (
          <ol>
            {reptiles.map((reptile) => (
              <li>{reptile}</li>
            ))}
          </ol>
        );
      }
      

      No entanto, se olhar para o console, você verá um aviso de que cada filho em uma matriz ou iterador deve possuir uma chave única.

      Aviso no console

      O aviso aparece porque quando você tenta renderizar uma coleção dentro de um componente, é necessário adicionar uma key.

      No React, uma key única é usada para determinar qual dos componentes em uma coleção precisa ser renderizado novamente. Adicionar uma key única impede o React de precisar renderizar novamente o componente inteiro cada vez que houver uma atualização.

      Neste passo, você irá renderizar vários elementos em um componente e adicionar uma chave única. Atualize o código para incluir uma key nos itens de lista para solucionar o aviso:

      function ReptileList() {
        const reptiles = ['alligator', 'snake', 'lizard'];
      
        return (
          <ol>
            {reptiles.map(reptile => (
              <li key={reptile}>{reptile}</li>
            ))}
          </ol>
        );
      }
      
      

      Agora que você adicionou uma key, o aviso não estará mais no console.

      No exemplo seguinte, você verá como renderizar elementos adjacentes sem encontrar um erro de sintaxe comum.

      Renderizando elementos adjacentes

      No JSX, para renderizar mais de um elemento em um componente, é necessário adicionar um wrapper em volta deles.

      Neste exemplo, você irá primeiro retornar uma lista de itens sem percorrer um loop por uma matriz:

      function ReptileListItems() {
        return (
          <li>alligator</li>
          <li>snake</li>
          <li>lizard</li>
        );
      }
      

      Isso lhe dará um erro de sintaxe no console:

      Erro de sintaxe do React para elementos JSX adjacentes

      Para corrigir esse erro, é necessário encapsular o bloco de elementos li em um wrapper. Para uma lista, é possível encapsulá-los em um elemento ol ou ul:

      function ReptileListItems() {
        return (
        <ol>
          <li>alligator</li>
          <li>snake</li>
          <li>lizard</li>
        </ol>
        );
      }
      

      Os elementos <li> adjacentes agora estão encapsulados em uma tag de fechamento, <ol>, e você não verá mais um erro.

      Na seção seguinte, você irá renderizar uma lista em um wrapper usando um componente fragment.

      Antes do React v16.2, era possível encapsular um bloco de componentes em um elemento <div>. Isso geraria um aplicativo cheio de divs, muitas vezes conhecido como “sopa de div”.

      Para corrigir esse problema, o React lançou um novo componente conhecido como o componente fragment:

      Quando precisar renderizar uma lista dentro de uma tag de fechamento, mas não quiser usar um div, use o React.Fragment como alternativa:

      function ReptileListItems() {
        return (
        <React.Fragment>
           <li>alligator</li>
           <li>snake</li>
           <li>lizard</li>
        </React.Fragment>
        );
      }
      

      O código renderizado irá incluir apenas os elementos li e o componente React.Fragment não aparecerá no código.

      Elementos JSX renderizados dentro de um wrapper React. Fragment

      Além disso, observe que não é necessário adicionar uma chave com o React.fragment.

      Você pode achar que escrever o React.fragment é mais enfadonho do que adicionar um <div>. Felizmente, a equipe do React desenvolveu uma sintaxe mais curta para representar este componente. Você pode usar <> </> no lugar de <React.Fragment></React.Fragment>:

      function ReptileListItems() {
        return (
       <>
          <li>alligator</li>
          <li>snake</li>
          <li>lizard</li>
       </>
        );
      }
      

      Conclusão

      Neste artigo, você explorou vários exemplos de como renderizar matrizes em um aplicativo React.

      Ao renderizar um elemento dentro de outro componente, é recomendável usar uma key única e encapsular seus elementos dentro de um elemento wrapper.

      Dependendo do seu caso de uso, é possível criar listas simples encapsuladas em um componente fragment que não precisa de uma chave.

      Para aprender mais sobre as melhores práticas com o React, siga a série completa Como programar no React.js da DigitalOcean.



      Source link

      Compreendendo os ganchos de ciclo de vida do Vue.js


      Introdução

      Ganchos de ciclo de vida são uma janela para ver como a biblioteca que você está usando funciona nos bastidores. Os ganchos de ciclo de vida permitem saber quando seu componente é criado, adicionado ao DOM, atualizado ou destruído.

      Este diagrama da documentação oficial do Vue.js captura o Ciclo de vida da instância Vue.js:

      Diagrama de ciclo de vida da instância Vue.js

      Este artigo irá apresentar-lhe os ganchos de criação, montagem, atualização e destruição.

      Compreendendo os ganchos de criação (inicialização)

      Os ganchos de criação são os primeiros ganchos que são executados em seu componente. Eles permitem que você execute ações antes mesmo do seu componente ser adicionado ao DOM. Ao contrário de qualquer um dos outros ganchos, os ganchos de criação também são executados durante a renderização do servidor.

      Use os ganchos de criação se for necessário configurar coisas em seu componente, tanto durante a renderização do cliente quanto na renderização do servidor.

      Você não terá acesso ao DOM ou ao elemento de montagem alvo (this.$el) dentro dos ganchos de criação.

      beforeCreate

      O hook beforeCreate é executado no momento da inicialização do seu componente. data (dados), que ainda não estão reativos, e os events (eventos) ainda não foram configurados:

      ExampleComponent.vue

      <script>
      export default {
        beforeCreate() {
          console.log('At this point, events and lifecycle have been initialized.')
        }
      }
      </script>
      

      Neste exemplo, quando o hook beforeCreate é executado, esse trecho irá registrar a mensagem: At this point, events and lifecycle have been initialized..

      created

      Você é capaz de acessar data e events reativos que estão ativos com o gancho created. Os modelos e o DOM virtual ainda não foram montados nem renderizados:

      ExampleComponent.vue

      <template>
        <div ref="example-element">{{ propertyComputed }}</div>
      </template>
      
      <script>
      export default {
        data() {
          return {
            property: 'Example property.'
          }
        },
      
        computed: {
          propertyComputed() {
            return this.property
          }
        },
      
        created() {
          console.log('At this point, this.property is now reactive and propertyComputed will update.')
          this.property = 'Example property updated.'
        }
      }
      </script>
      

      Neste exemplo, o trecho de código irá armazenar property como Example property. Quando o gancho created é executado, uma mensagem de At this point, this.property is now reactive and propertyComputed will update. será registrado e, em seguida, property é alterada para Example property updated.

      Mais tarde no ciclo de vida, {{ propertyComputed }} irá aparecer como Example property updated em vez de Example property.

      Neste passo, você revisou alguns exemplos de ganchos de criação e está pronto para seguir em frente para a próxima parte do ciclo de vida, os ganchos de montagem.

      Compreendendo os hooks de montagem (Inserção DOM)

      Os ganchos de montagem são frequentemente os ganchos mais usados. Eles permitem que você acesse seu componente imediatamente antes e depois da primeira renderização. No entanto, eles não são executados durante a renderização do servidor.

      Use os ganchos de montagem caso seja necessário acessar ou modificar o DOM do seu componente imediatamente antes ou após a renderização inicial.

      Não use os ganchos de montagem se for necessário buscar alguns dados para o seu componente na inicialização.

      Nota: use created (ou created e activated para os componentes keep-alive) para isso. Especialmente se precisar desses dados durante a renderização do servidor.

      beforeMount

      O gancho beforeMount é executado imediatamente antes da renderização inicial acontecer e depois que o modelo ou funções de renderização forem compilados:

      ExampleComponent.vue

      <script>
      export default {
        beforeMount() {
          console.log(`At this point, vm.$el has not been created yet.`)
        }
      }
      </script>
      

      Neste exemplo, quando o hook beforeMount é executado, esse trecho irá registrar a mensagem: At this point, vm.$el has not been created yet..

      mounted

      No gancho mounted, você terá acesso completo ao componente reativo, modelos e DOM renderizado (via this.$el).

      Use o mounted para modificar o DOM — particularmente ao integrar as bibliotecas que não forem Vue:

      ExampleComponent.vue

      <template>
        <div ref="example-element">Example component.</div>
      </template>
      
      <script>
      export default {
        mounted() {
          console.log(`At this point, vm.$el has been created and el has been replaced.`);
          console.log(this.$el.textContent) // Example component.
        }
      }
      </script>
      

      Neste exemplo, quando o gancho mounted é executado, esse trecho irá registrar a mensagem At this point, vm.$el has been created and el has been replaced.. Além disso, uma mensagem de Example content. (this.$el.textContent) será registrada.

      Nessa seção, você explorou os casos de uso para os hooks de montagem. No próximo passo, revisará alguns exemplos que usam ganchos de atualização.

      Compreendendo os ganchos de atualização (Diff & Re-render)

      Ganchos de atualização são chamados sempre que uma propriedade reativa usada pelo seu componente é alterada ou alguma coisa faz com que ela seja re-renderizada. Eles permitem que você use hooks no ciclo watch-compute-render para o seu componente.

      Use os ganchos de atualização se for necessário saber quando o seu componente é re-renderizado. Tavez para depurar ou criação de perfil.

      Não use os ganchos de atualização se precisar saber quando uma propriedade reativa em seu componente é alterada. Em vez disso, use propriedades computadas ou inspetores para isso.

      beforeUpdate

      O gancho beforeUpdate é executado após dados serem alterados em seu componente e o ciclo de atualização começa, logo antes do DOM ser corrigido e re-renderizado.

      Use beforeUpdate se precisar obter o novo estado de qualquer dado reativo em seu componente antes dele ser de fato renderizado:

      ExampleComponent.vue

      <template>
        <div ref="example-element">{{counter}}</div>
      </template>
      
      <script>
      export default {
        data() {
          return {
            counter: 0
          }
        },
      
        created() {
          setInterval(() => {
            this.counter++
          }, 1000)
        },
      
        beforeUpdate() {
          console.log(`At this point, Virtual DOM has not re-rendered or patched yet.`)
          // Logs the counter value every second, before the DOM updates.
          console.log(this.counter)
        }
      }
      </script>
      

      Primeiro, esse trecho irá armazenar o counter como 0. Quando o gancho created for executado, ele irá incrementar o counter a cada 1000 ms. Quando o gancho beforeUpdate é executado, esse trecho irá registrar a mensagem: At this point, Virtual DOM has not re-rendered or patched yet. e um número para o counter é registrado.

      updated

      O gancho updated é executado após dados em seu componente sofrerem alteração e o DOM re-renderizar.

      Use updated se precisar acessarr o DOM após uma alteração de propriedade:

      ExampleComponent.vue

      <template>
        <div ref="example-element">{{counter}}</div>
      </template>
      
      <script>
      export default {
        data() {
          return {
            counter: 0
          }
        },
      
        created() {
          setInterval(() => {
            this.counter++
          }, 1000)
        },
      
        updated() {
          console.log(`At this point, Virtual DOM has re-rendered and patched.`)
          // Fired every second, should always be true
          console.log(+this.$refs['example-element'].textContent === this.counter)
        }
      }
      </script>
      

      Primeiro, esse trecho irá armazenar o counter como 0. Quando o gancho created for executado, ele irá incrementar o counter a cada 1000 ms. Quando o hook updated é executado, esse trecho irá registrar a mensagem: At this point, Virtual DOM has re-rendered and patched. e um valor booleano de true é registrado porque o valor renderizado e o valor atual são iguais.

      Agora que você explorou o uso de ganchos de atualização, está pronto para aprender sobre ganchos de destruição.

      Compreendendo os hooks de destruição (Teardown)

      Os hooks de destruição permitem que você execute ações quando o seu componente é destruído, tais como a limpeza ou a transmissão de análise. Eles são acionados quando o seu componente está sendo destruído e removido do DOM.

      beforeDestroy

      O beforeDestroy é acionado imediatamente antes da destruição. Seu componente ainda estará totalmente presente e funcional.

      Use beforeDestroy se precisar limpar eventos ou assinaturas reativas:

      ExampleComponent.vue

      <script>
      export default {
        data() {
          return {
            exampleLeakyProperty: 'This represents a property that will leak memory if not cleaned up.'
          }
        },
      
        beforeDestroy() {
          console.log(`At this point, watchers, child components, and event listeners have not been teared down yet.`)
          // Perform the teardown procedure for exampleLeakyProperty.
          // (In this case, effectively nothing)
          this.exampleLeakyProperty = null
          delete this.exampleLeakyProperty
        }
      }
      </script>
      

      Esse código irá primeiro armazenar o exampleLeakyProperty. Quando o gancho beforeDestroy é executado, esse trecho irá registrar a mensagem At this point, watchers, child components, and event listeners have not been torn down yet. e, em seguida, o exampleLeakyProperty é excluído.

      destroyed

      Ao chegar no hook destroyed, praticamente nada terá sobrado em seu componente. Tudo o que foi anexado a ele foi destruído.

      Use o destroyed se precisar fazer qualquer limpeza de última hora ou informar um servidor remoto que o componente foi destruído:

      ExampleComponent.vue

      <script>
      import ExampleAnalyticsService from './example-analytics-service'
      
      export default {
        destroyed() {
          console.log(`At this point, watchers, child components, and event listeners have been torn down.`)
          console.log(this)
          ExampleAnalyticsService.informService('Component destroyed.')
        }
      }
      </script>
      

      Primeiro, esse trecho irá importar o ExampleAnalyticsService. Quando o gancho beforeDestroy é executado, esse trecho irá registrar a mensagem At this point, watchers, child components, and event listeners have been torn down. O que resta do componente será registrado no console, e o ExampleAnalyticsService receberá a mensagem Component destroyed..

      Com isso, você concluiu sua revisão geral dos ganchos do ciclo de vida do Vue.js.

      Outros hooks

      Existem outros dois ganchos, activated e deactivated. Eles são para os componentes keep-alive, um tópico que está fora do âmbito deste artigo.

      Basta dizer que eles permitem que você detecte quando um componente que está envolvido em uma etiqueta <keep-alive></keep-alive> está ativo ou não. Você pode usá-los para buscar dados para o seu componente ou manipular alterações de estado, fazendo com que sejam semelhantes ao created e beforeDestroy, mas sem a necessidade de fazer uma recompilação completa do componente.

      Conclusão

      Neste artigo, você foi apresentado a diferentes ganchos de ciclo de vida disponíveis na instância de ciclo de vida Vue.js. Você explorou os diferentes casos de uso para ganchos de criação, ganchos de montagem, ganchos de atualização e ganchos de destruição.

      Se quiser aprender mais sobre o Vue.js, confira nossa página de tópico do Vue.js para exercícios e projetos de programação.



      Source link