Vue.js: Bibliotecas de UI
Última atualização: 2026-10-20
Uma biblioteca de componentes de interface do usuário permite que você evite reinventar a roda — componentes comuns como Botão, Tabela, Formulário e Modal podem ser usados com apenas algumas linhas de código. O ecossistema do Vue 3 conta com mais de cinco bibliotecas de interface do usuário populares (Element Plus, Naive UI, Vuetify, PrimeVue e Ant Design Vue), e escolher a mais adequada pode economizar 50% do seu tempo de desenvolvimento.
Ao escolher uma biblioteca de interface do usuário, há cinco fatores principais a serem considerados: variedade de componentes / suporte a TypeScript / personalização de temas / tamanho do pacote / atividade da comunidade. Esta aula vai ajudar você a fazer a escolha certa.
1. O que você vai aprender
- Comparação entre 5 bibliotecas de interface do usuário para Vue 3 (Element Plus / Naive UI / Vuetify / PrimeVue / Ant Design Vue)
- Importação sob demanda (unplugin-vue-components)
- Personalização do tema (variáveis CSS / variáveis SCSS)
- Embalagem secundária de componentes (personalizada de acordo com as necessidades da empresa)
- Integração com bibliotecas de ícones (@iconify / unplugin-icons)
- 5 erros comuns
2. O pesadelo de um componente “5-Table” repetido 5 vezes
(1) Desafio: Ter que criar todas as tabelas do zero
O painel de administração da Alice tinha 5 visualizações de tabela diferentes, cada uma criada do zero:
5 tabelas × 200 linhas = 1.000 linhas de código duplicado. Toda vez que você altera um estilo, precisa fazer 5 alterações.
(2) Solução da biblioteca de componentes de interface do usuário: 1 el-table, reutilizado em 5 lugares
<!-- ✅ Correct Version: Use Element Plus el-table -->
<template>
<el-table :data="orders" stripe>
<el-table-column prop="id" label="ID" width="80" />
<el-table-column prop="user" label="User" />
<el-table-column prop="total" label="Total" :formatter="formatTotal" />
</el-table>
</template>
<script setup>
import { ElTable, ElTableColumn } from 'element-plus'
const orders = ref([...])
function formatTotal(row) { return `$${row.total}` }
</script>
1 tabela, reutilizada em 5 lugares. Todas as tabelas têm um estilo unificado e interatividade consistente.
(3) Receita
Após usar o Element Plus:
- Tamanho do código: 1.000 linhas → 200 linhas (-80%)
- Consistência de estilo: 100% consistente
- Nova tabela: modelo de 1 linha
- TypeScript: Inferência de tipos completa
- Acessibilidade: Acessibilidade integrada
3. Comparação das 5 principais bibliotecas de interface do usuário do Vue 3
(1) Referência rápida às 5 principais bases de dados
| Biblioteca | Estilo | Número de componentes | Tamanho do pacote | TypeScript | Compatibilidade |
|---|---|---|---|---|---|
| Element Plus | Desktop | 80+ | ~250 KB | ✅ | Mais popular na China, Backend |
| Interface de usuário simples | Desktop | 80+ | ~150 KB | ✅ | Estilo moderno, preferência por Vue 3 |
| Vuetify | Material | Mais de 80 | ~300 KB | ✅ | Aplicativos com Material Design |
| PrimeVue | Vários estilos | Mais de 90 | ~200 KB | ✅ | Ampla variedade de temas e componentes abrangentes |
| Ant Design Vue | Ant Design | Mais de 70 | ~180 KB | ✅ | Estilo Ant Design, nível empresarial |
(2) Comparação detalhada em 5 dimensões
| Aspecto | Element Plus | Naive UI | Vuetify | PrimeVue | Ant Design Vue |
|---|---|---|---|---|---|
| GitHub ⭐ | Mais de 24 mil | Mais de 16 mil | Mais de 40 mil | Mais de 11 mil | Mais de 20 mil |
| Vue 3: Cidadão de Primeira Classe | ✅ | ✅ | ✅ | ✅ | ✅ |
| TypeScript | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Personalização do tema | Variáveis CSS | Variáveis CSS | SCSS | SCSS + Tema | LESS + Tema |
| Tamanho da bolsa | Médio | Pequeno | Grande | Médio | Médio |
| Documentação em chinês | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| Atividade da comunidade | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| Curva de aprendizado | Suave | Suave | Moderada | Moderada | Moderada |
(3) 5 dicas importantes para a escolha
| Cenário | Recomendação |
|---|---|
| Sistemas internos de back-office (comércio eletrônico/CRM/ERP) | Element Plus ⭐⭐⭐⭐⭐ |
| SaaS de estilo moderno | Interface de usuário simples ⭐⭐⭐⭐ |
| Aplicativos com Material Design | Vuetify ⭐⭐⭐⭐ |
| Vários temas (escuro/claro/alto contraste) | PrimeVue ⭐⭐⭐⭐ |
| Ecossistema Ant Design | Ant Design Vue ⭐⭐⭐⭐ |
4. O Element Plus na prática
(1) Instalação
npm install element-plus @element-plus/icons-vue
(2) Registro global (simples)
(3) Importação sob demanda (recomendado; economiza 50% no tamanho)
npm install -D unplugin-vue-components unplugin-auto-import
// vite.config.ts
import AutoImport from 'unplugin-auto-import'
import Components from 'unplugin-vue-components'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
plugins: [
AutoImport({
resolvers: [ElementPlusResolver()],
dts: 'src/auto-imports.d.ts'
}),
Components({
resolvers: [ElementPlusResolver()],
dts: 'src/components.d.ts'
})
]
})
(4) 5 componentes principais
▶ Exemplo: 5 Principais Componentes Essenciais
<el-button>Button</el-button>
<el-form>Form</el-form>
<el-table>Table</el-table>
<el-dialog>Dialog</el-dialog>
<el-message>Message</el-message>
Saída:
Botão, formulário, tabela, diálogo e mensagem aparecem com o estilo padrão do Element Plus.
el-dialog e el-message só aparecem quando acionados por código.
Os componentes chegam sem import graças ao resolvedor automático.
5. Personalização do tema
(1) Substituições de variáveis CSS (recomendado)
// src/styles/element-plus.scss
:root {
--el-color-primary: #42b883; // Change the primary color to Vue Green
--el-color-success: #67c23a;
--el-color-warning: #e6a23c;
--el-color-danger: #f56c6c;
--el-color-info: #909399;
--el-border-radius-base: 8px; // Increase Corner Radius
--el-font-size-base: 14px;
}
// main.js
import './styles/element-plus.scss'
import 'element-plus/dist/index.css'
(2) Variáveis SCSS (Personalização avançada)
// src/styles/element-plus-vars.scss
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
$colors: (
'primary': ('base': #42b883),
'success': ('base': #67c23a),
'warning': ('base': #e6a23c),
'danger': ('base': #f56c6c),
'info': ('base': #909399)
)
);
// main.js
import './styles/element-plus-vars.scss'
import 'element-plus/dist/index.css'
(3) Modo escuro
// Dark Theme
:root {
--el-color-primary: #42b883;
--el-bg-color: #1a1a1a;
--el-text-color-primary: #ffffff;
}
html.dark {
--el-bg-color: #1a1a1a;
--el-text-color-primary: #ffffff;
}
6. Embalagem secundária dos componentes
(1) Exemplo de um componente de negócios
▶ Experimente<!-- Usage:3 All set 1 A table -->
<BusinessTable :data="orders" :columns="orderColumns" :total="100" />
(2) 5 principais benefícios do encapsulamento
- Reduzir a duplicação de código: mais de 50 tabelas compartilhadas
- Estilo consistente: Todas as tabelas têm o mesmo estilo
- Personalização empresarial: Carregamento automático + Paginação + Estado vazio
- TypeScript: Props fortemente tipadas
- Fácil de manter: basta alterar em um lugar para que a mudança tenha efeito em N lugares
7. Integração da biblioteca de ícones
(1) Instalação
npm install -D unplugin-icons @iconify-json/carbon
(2) Configuração
// vite.config.ts
import Icons from 'unplugin-icons/vite'
import { FileSystemIconLoader } from 'unplugin-icons/dist/loader'
export default defineConfig({
plugins: [
Icons({
compiler: 'vue3',
autoInstall: true, // Automatically Install Icon Sets
collections: {
carbon: () => import('@iconify-json/carbon/icons.json').then(i => i.default)
}
})
]
})
(3) Uso
(4) Comparação das 5 principais bibliotecas de ícones
| Biblioteca | Número de ícones | Método de carregamento | Tamanho do pacote |
|---|---|---|---|
| Iconify | Mais de 200.000 | Sob demanda (recomendado) | 0 |
| Ícones de elementos | Mais de 300 | Todos / Sob demanda | 100 KB |
| Ícones de materiais | Mais de 2.000 | Todos / Sob demanda | 300 KB |
| Font Awesome | Mais de 7.000 | Todos | Mais de 1 MB |
| Heroicons | Mais de 300 | Sob demanda | 50 KB |
8. Exercício abrangente: personalização de tema do Element Plus
(1) 📊 1. Comparação das 5 principais bibliotecas de interface do usuário
| Biblioteca | ⭐ | Tamanho da embalagem | Estilo |
|---|---|---|---|
| Element Plus | 24k | Médio | Desktop |
| Interface de usuário simples | 16k | Pequena | Moderna |
| Vuetify | 40 mil | Grande | Material |
| PrimeVue | 11k | Médio | Vários estilos |
| Ant Design Vue | 20 mil | Medium | Ant Design |
▶ Exemplo: Personalização dos 5 temas principais
// 1. CSS Variable
:root { --el-color-primary: #42b883; }
// 2. SCSS Variable
@forward 'var.scss' with ($colors: ...);
// 3. Dark Mode
:root.dark { --el-bg-color: #1a1a1a; }
// 4. Custom Themes
@import 'element-plus/theme-chalk/dark/css-vars.css';
// 5. Change Theme(Runtime)
document.documentElement.classList.toggle('dark')
Saída:
Trocar --el-color-primary para #42b883 recolore botões e links.
A classe .dark no elemento raiz aplica as variáveis do modo escuro.
A troca em runtime (classList.toggle) muda o tema sem recarregar a página.
(2) 📊 4. 5 Principais bibliotecas de ícones
| Biblioteca | Número de ícones |
|---|---|
| Iconify | Mais de 200.000 |
| Ícones de elementos | Mais de 300 |
| Material | Mais de 2.000 |
| Font Awesome | Mais de 7.000 |
| Heroicons | Mais de 300 |
(3) 📊 5. Referência rápida para 5 erros comuns
| Erro | Sintoma | Solução |
|---|---|---|
| Importar todo o pacote Baoda | pacote de 500 KB | Usar o unplugin-vue-components conforme necessário |
| Não é possível alterar a cor do tema | Usando SCSS | Mudar para variáveis CSS |
| Ícones não exibidos | Falha ao carregar a fonte | Usar SVG do unplugin-icons |
| Erro de tipo TS | Tipo ausente na importação | Instale o pacote @types |
| Falha na internacionalização | Configuração regional incorreta | Configurar i18n |
▶ Exemplo: Criando um botão e um card «estilo biblioteca» com CSS puro
▶ Expandir exemplo executável (78 linhas)
Saída:
Três botões aparecem: Default / Primary / Delete
Clicar em Delete mostra um loading de 800ms e a mensagem muda para «excluído»
O card exibe o cabeçalho Order #1024, o texto 3 items, total ¥267 e o botão Pay now
❓ Perguntas Frequentes
--el-color-primary. Para personalizar variáveis SCSS, é necessário compilar o tema usando o plugin unplugin-element-plus.📖 Resumo
- 5 bibliotecas de interface do usuário para Vue 3: Element Plus / Naive UI / Vuetify / PrimeVue / Ant Design Vue
- O Element Plus é o mais popular na China, com uma ampla seleção de componentes (mais de 80) e suporte a TypeScript
- Importação sob demanda: unplugin-vue-components + ElementPlusResolver
- Personalização do tema: Substituição de variáveis CSS (recomendado) + variáveis SCSS (análise aprofundada)
- Encapsulamento secundário: reduz a duplicação de código nos componentes de negócios
- Iconify: mais de 200.000 ícones + unplugin-icons sob demanda
- 5 bibliotecas de ícones: Iconify / Element / Material / Font Awesome / Heroicons
📝 Exercícios
-
Questões básicas (Dificuldade: ⭐)
Integração do Element Plus em um projeto Vue 3:
- Instalar + Importar sob demanda
- 5 componentes principais (Botão / Formulário / Tabela / Caixa de diálogo / Mensagem)
- Alterar a cor do tema para a cor principal do projeto
-
Problemas avançados (Dificuldade: ⭐⭐)
Implementar a integração completa com o Element Plus:
- 5 integrações de componentes (botão / formulário / tabela / caixa de diálogo / mensagem)
- Ativar/desativar o modo escuro
- Iconify Icons (10 ícones diferentes)
- Re-encapsular o componente BusinessTable
-
Problema de desafio (Dificuldade: ⭐⭐⭐)
Alcançar a “integração completa da biblioteca de interface do usuário em nível corporativo”:
- Element Plus + Naive UI Combinados (Primário + Secundário)
- 5 cores principais (primárias / secundárias / de sucesso / de aviso / de perigo)
- Modo escuro + Sistema de acompanhamento automático
- Mais de 10 componentes comerciais para embalagens secundárias
- Criar mais de 200.000 ícones
- Tipagem forte do TypeScript
- Otimização de desempenho (sob demanda + tree shaking + CDN)