Migrando para versão 4.0 da versão 3.x
Quase todas as APIs do Vuex 4 permaneceram inalteradas desde o Vuex 3. No entanto, ainda existem algumas mudanças importantes que você deve corrigir.
Alterações Importantes
Processo de instalação
Para alinhar com o novo processo de inicialização do Vue 3, o processo de instalação do Vuex mudou. Para criar um novo store, os usuários agora são incentivados a usar a função createStore recém-introduzida.
import { createStore } from 'vuex' export const store = createStore({ state () { return { count: 1 } } })
Para instalar Vuex em uma instância Vue, passe o store
em vez do Vuex.
import { createApp } from 'vue' import { store } from './store' import App from './App.vue' const app = createApp(App) app.use(store) app.mount('#app')
NOTE
Embora esta não seja tecnicamente uma alteração importante, você ainda pode usar a sintaxe new Store(...)
, recomendamos esta abordagem para alinhar com Vue 3 e Vue Router Next.
Suporte ao TypeScript
Vuex 4 remove suas tipagens globais para this.$store
dentro de um componente Vue para resolver essa issue #994. Quando usado com TypeScript, você deve declarar seu próprio module augmentation.
Coloque o seguinte código em seu projeto para permitir que this.$store
seja tipado corretamente:
// vuex-shim.d.ts import { ComponentCustomProperties } from 'vue' import { Store } from 'vuex' declare module 'vue' { // Declare seus próprios estados do store interface State { count: number } interface ComponentCustomProperties { $store: Store<State> } }
Você pode aprender mais na seção Suporte ao TypeScript.
Os pacotes agora estão alinhados com Vue 3
Os seguintes pacotes são gerados para se alinhar aos pacotes Vue 3:
vuex.global(.prod).js
- Para uso direto com
<script src="...">
no navegador. Expõe o Vuex global. - A distribuição (ou build) global é construída como IIFE, e não UMD, e destina-se apenas ao uso direto com
<script src="...">
. - Contém branches chumbadas no código (ou hard-coded) de prod/dev e a compilação de prod é pré-minificada. Use os arquivos
.prod.js
para produção.
- Para uso direto com
vuex.esm-browser(.prod).js
- Para uso com importações de módulo ES nativo (incluindo navegadores de suporte de módulo via
<script type="module">
.
- Para uso com importações de módulo ES nativo (incluindo navegadores de suporte de módulo via
vuex.esm-bundler.js
- Para uso com empacotadores como
webpack
,rollup
eparcel
. - Deixa os branches de prod/dev com os guardas de tipo
process.
(deve ser substituído pelo empacotador).env.NODE_ENV - Não envia distribuições (ou builds) minificados (para ser feito junto com o resto do código após o empacotamento).
- Para uso com empacotadores como
vuex.cjs.js
- Para uso em renderização do lado do servidor (server-side rendering) no Node.js com
require()
.
- Para uso em renderização do lado do servidor (server-side rendering) no Node.js com
A função createLogger
é exportada do módulo principal
No Vuex 3, a função createLogger
foi exportada de vuex/dist/logger
, mas agora está incluída no pacote principal. A função deve ser importada diretamente do pacote vuex
.
import { createLogger } from 'vuex'
Novas Características
Nova função de composição useStore
Vuex 4 apresenta uma nova API para interagir com o store na API de composição (ou Composition API). Você pode usar a função de composição useStore
para recuperar o store dentro do gatilho (ou hook) setup
do componente.
import { useStore } from 'vuex' export default { setup () { const store = useStore() } }
Você pode aprender mais na seção API de Composição.