Logo

dev-resources.site

for different kinds of informations.

Desenvolvimento de Componentes Assíncronos com Vue.js

Published at
10/31/2023
Categories
vue
javascript
component
Author
jhonyaraujooficial
Categories
3 categories in total
vue
open
javascript
open
component
open
Author
18 person written this
jhonyaraujooficial
open
Desenvolvimento de Componentes Assíncronos com Vue.js

O Vue.js é uma biblioteca progressiva para construção de interfaces de usuário, e uma das suas principais vantagens é a capacidade de criar componentes reutilizáveis.

À medida que suas aplicações crescem em complexidade, é comum lidar com operações assíncronas, como chamadas de API ou carregamento de dados dinâmicos.

Neste artigo, exploraremos como desenvolver componentes assíncronos com Vue.js, usando exemplos práticos para ilustrar os conceitos.

1. Introdução aos Componentes Assíncronos em Vue.js

Antes de mergulhar nos exemplos práticos, é essencial entender o conceito de assincronia em Vue.js.

Os componentes assíncronos geralmente envolvem operações que não podem ser concluídas imediatamente, como requisições de dados externos.

2. Carregando Dados de uma API Assíncrona

Um caso comum é carregar dados de uma API. Vamos criar um componente que exibe uma lista de usuários após obter os dados de uma API assíncrona.

<template>
  <div>
    <h2>Lista de Usuários</h2>
    <ul>
      <li v-for="user in users" :key="user.id">{{ user.name }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      users: [],
    };
  },
  async mounted() {
    try {
      const response = await fetch('https://api.example.com/users');
      this.users = await response.json();
    } catch (error) {
      console.error('Erro ao carregar usuários:', error);
    }
  },
};
</script>

Enter fullscreen mode Exit fullscreen mode

Neste exemplo, usamos o ciclo de vida mounted para realizar a chamada assíncrona à API assim que o componente é montado.

3. Trabalhando com Promessas e Promise.all

Em alguns casos, pode ser necessário realizar várias chamadas assíncronas e aguardar que todas sejam concluídas. O uso de Promise.all é uma abordagem eficaz.

<template>
  <div>
    <h2>Informações Combinadas</h2>
    <ul>
      <li v-for="info in combinedInfo" :key="info.id">{{ info.data }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      info1: null,
      info2: null,
    };
  },
  async mounted() {
    try {
      const request1 = fetch('https://api.example.com/info1');
      const request2 = fetch('https://api.example.com/info2');

      const [response1, response2] = await Promise.all([request1, request2]);

      this.info1 = await response1.json();
      this.info2 = await response2.json();
    } catch (error) {
      console.error('Erro ao carregar informações:', error);
    }
  },
  computed: {
    combinedInfo() {
      if (this.info1 && this.info2) {
        return [{ id: 1, data: this.info1 }, { id: 2, data: this.info2 }];
      }
      return [];
    },
  },
};
</script>

Enter fullscreen mode Exit fullscreen mode

Neste exemplo, realizamos duas chamadas assíncronas simultâneas e combinamos os resultados em um único array usando Promise.all.

4. Lazy Loading de Componentes

O Vue.js oferece a capacidade de carregar componentes de forma assíncrona somente quando são necessários. Isso é conhecido como "lazy loading".

<template>
  <div>
    <h2>Página Principal</h2>
    <button @click="loadDynamicComponent">Carregar Componente Dinâmico</button>
    <component :is="dynamicComponent" v-if="dynamicComponent" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      dynamicComponent: null,
    };
  },
  methods: {
    async loadDynamicComponent() {
      try {
        const module = await import('./DynamicComponent.vue');
        this.dynamicComponent = module.default;
      } catch (error) {
        console.error('Erro ao carregar componente dinâmico:', error);
      }
    },
  },
};
</script>

Enter fullscreen mode Exit fullscreen mode

Neste exemplo, carregamos o componente DynamicComponent de forma assíncrona quando um botão é clicado.

Conclusão

Desenvolver componentes assíncronos com Vue.js é fundamental para criar aplicações robustas e eficientes. Ao compreender os conceitos apresentados e aplicar exemplos práticos, você estará preparado para lidar com operações assíncronas em seus projetos Vue.js.

Referências

https://pt.vuejs.org/guide/components/async.html#basic-usage

component Article's
30 articles in total
Favicon
Build a note app with JavaScript component.
Favicon
Key characteristic of Component-Based Architecture
Favicon
React Component Libraries: Overview of 19 Top Libs
Favicon
Styling Components in React 🧢
Favicon
Building a Seamless OTP Input Field in React: A Step-by-Step Guide
Favicon
MithrilJS component with state management
Favicon
[Off Topic] Nano introdução do framework Angular para Devs do back
Favicon
Comparing Vue Component Documentation tools
Favicon
Laravel 11 Custom Component File Structure
Favicon
Building Message Component in Vue3
Favicon
Aplicando paginação em um componente Select
Favicon
How much does it cost to repair an outdoor LED display?
Favicon
Global toast in Vue3
Favicon
Unveiling the Hidden Gem of React: The Power of Compound Components
Favicon
Controlled vs Uncontrolled Components in React
Favicon
React components -(Class component v/s function component)
Favicon
3 Ways to Create React Components with Bit
Favicon
Client or Server component ?
Favicon
Desenvolvimento de Componentes Assíncronos com Vue.js
Favicon
NAND Flash vs NOR Flash: Differences between them
Favicon
Link Component in React Router
Favicon
Guia de Components - para quem tem pressa!
Favicon
How to exchange data between Angular components
Favicon
Component Testing with Cypress and Reactjs
Favicon
React - Higher Order Components (HOC)
Favicon
How to Create Component Library Like Material UI or Mantine UI?
Favicon
Looking forward to adding Algolia's DOCSEARCH to Mantine DataTable
Favicon
Cypress Component Testing vs React Testing Library - the complete comparison
Favicon
Creating Custom Component for NPS Feedback
Favicon
Maximize your Angular code reusability using <NgTemplateOutlet>

Featured ones: