Inicialização e Configuração do Pinia
Configuração de inicialização do Pinia e design da estrutura do projeto em um projeto de plataforma multi-marca.
1. Eixos principais de resposta em entrevista
- Razões para escolher o Pinia: Melhor suporte TypeScript, API mais simples, design modular, melhor experiência de desenvolvimento.
- Configuração de inicialização: Uso de
piniaPluginPersistedstatepara persistência, extensão da interfacePiniaCustomProperties. - Estrutura do projeto: 30+ stores, gerenciados por categorias de domínio funcional.
2. Por que Pinia?
2.1 Pinia vs Vuex
Pinia é a ferramenta oficial de gerenciamento de estado para Vue 3 e, como sucessor do Vuex, oferece uma API mais simples e melhor suporte TypeScript.
Resposta chave para entrevista:
-
Melhor suporte TypeScript
- Pinia fornece inferência de tipos completa
- Não precisa de funções auxiliares adicionais (como
mapState,mapGetters)
-
API mais simples
- Não precisa de mutations (camada de operações síncronas no Vuex)
- Executar operações síncronas/assíncronas diretamente nas actions
-
Design modular
- Sem módulos aninhados
- Cada store é independente
-
Melhor experiência de desenvolvimento
- Suporte ao Vue Devtools
- Hot Module Replacement (HMR)
- Tamanho menor (aprox. 1KB)
-
Recomendação oficial do Vue 3
- Pinia é a ferramenta oficial de gerenciamento de estado para Vue 3
2.2 Componentes principais do Pinia
// Os três elementos centrais de um Store
{
state: () => ({ ... }), // Dados de estado
getters: { ... }, // Propriedades computadas
actions: { ... } // Métodos (síncronos/assíncronos)
}
Correspondência com componentes Vue:
state≈datagetters≈computedactions≈methods
3. Configuração de inicialização do Pinia
3.1 Configuração básica
Localização do arquivo: src/stores/index.ts
import { store } from 'quasar/wrappers';
import { createPinia } from 'pinia';
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
import { Router } from 'vue-router';
// Estender propriedades personalizadas do Pinia
declare module 'pinia' {
export interface PiniaCustomProperties {
readonly router: Router;
}
}
export default store(() => {
const pinia = createPinia();
// Registrar plugin de persistência
pinia.use(piniaPluginPersistedstate);
return pinia;
});
Pontos-chave de entrevista:
- ✅ Uso de
piniaPluginPersistedstatepara persistência de estado - ✅ Extensão da interface
PiniaCustomPropertiespara todos os stores acessarem o router - ✅ Integração através do wrapper
storedo Quasar
3.2 Estrutura de arquivos do Store
src/stores/
├── index.ts # Configuração da instância Pinia