Almost all Vuex 4 APIs have remained unchanged from Vuex 3. However, there are still a few breaking changes that you must fix.
To align with the new Vue 3 initialization process, the installation process of Vuex has changed. To create a new store, users are now encouraged to use the newly introduced createStore function.
import { createStore } from 'vuex'
export const store = createStore({
state () {
return {
count: 1
}
}
})
To install Vuex to a Vue instance, pass the store
instead of Vuex.
import { createApp } from 'vue'
import { store } from './store'
import App from './App.vue'
const app = createApp(App)
app.use(store)
app.mount('#app')
:::tip NOTE
Whilst this is not technically a breaking change, you may still use the new Store(...)
syntax, we recommend this approach to align with Vue 3 and Vue Router Next.
:::
Vuex 4 removes its global typings for this.$store
within a Vue component to solve issue #994. When used with TypeScript, you must declare your own module augmentation.
Place the following code in your project to allow this.$store
to be typed correctly:
// vuex-shim.d.ts
import { ComponentCustomProperties } from 'vue'
import { Store } from 'vuex'
declare module 'vue' {
// Declare your own store states.
interface State {
count: number
}
interface ComponentCustomProperties {
$store: Store<State>
}
}
You can learn more in the TypeScript Support section.
The following bundles are generated to align with Vue 3 bundles:
vuex.global(.prod).js
<script src="...">
in the browser. Exposes the Vuex global.<script src="...">
..prod.js
files for production.vuex.esm-browser(.prod).js
<script type="module">
.vuex.esm-bundler.js
webpack
, rollup
and parcel
.process.env.NODE_ENV
guards (must be replaced by bundler).vuex.cjs.js
require()
.createLogger
function is exported from the core moduleIn Vuex 3, createLogger
function was exported from vuex/dist/logger
but it's now included in the core package. The function should be imported directly from the vuex
package.
import { createLogger } from 'vuex'
useStore
composition functionVuex 4 introduces a new API to interact with the store in Composition API. You can use the useStore
composition function to retrieve the store within the component setup
hook.
import { useStore } from 'vuex'
export default {
setup () {
const store = useStore()
}
}
You can learn more in the Composition API section.