从 0.0.7 迁移
0.0.7
之后的版本:0.1.0
和 0.2.0
,带来了一些重大的破坏性变更。本指南将帮助您迁移,无论您使用的是 Vue 2 还是 Vue 3。完整的变更日志可以在仓库中找到。
如果您在迁移过程中遇到问题或疑问,请随时 打开讨论 寻求帮助。
不再使用 store.state
您不再可以通过 state
属性访问 Store 状态,可以直接访问任何状态属性。
假设使用以下代码定义了一个 Store:
js
const useStore({
id: 'main',
state: () => ({ count: 0 })
})
执行以下操作:
diff
const store = useStore()
-store.state.count++
+store.count.++
您仍然可以在需要时使用 $state
访问整个 Store 状态。
diff
-store.state = newState
+store.$state = newState
Store 属性重命名
所有 Store 属性(id
、patch
、reset
等)现在都以 $
为前缀,以便允许在 Store 上定义具有相同名称的属性。提示:您可以使用 F2(或右键单击 + 重构)对 Store 的每个属性进行重构,从而重构整个代码库。
diff
const store = useStore()
-store.patch({ count: 0 })
+store.$patch({ count: 0 })
-store.reset()
+store.$reset()
-store.id
+store.$id
Pinia 实例
现在需要创建一个 Pinia 实例并安装它。
如果您使用的是 Vue 2(Pinia <= 1)
js
import Vue from 'vue'
import { createPinia, PiniaVuePlugin } from 'pinia'
const pinia = createPinia()
Vue.use(PiniaVuePlugin)
new Vue({
el: '#app',
pinia,
// ...
})
如果您使用的是 Vue 3(Pinia >= 2)
js
import { createApp } from 'vue'
import { createPinia, PiniaVuePlugin } from 'pinia'
import App from './App.vue'
const pinia = createPinia()
createApp(App).use(pinia).mount('#app')
pinia
实例保存了状态,并且应该 **每个应用程序唯一**。有关更多详细信息,请查看文档的 SSR 部分。
SSR 变更
SSR 插件 PiniaSsr
不再需要,并且已被移除。随着 Pinia 实例的引入,getRootState()
不再需要,应该用 pinia.state.value
替换。
如果您使用的是 Vue 2(Pinia <= 1)
diff
// entry-server.js
-import { getRootState, PiniaSsr } from 'pinia',
+import { createPinia, PiniaVuePlugin } from 'pinia',
-// install plugin to automatically use correct context in setup and onServerPrefetch
-Vue.use(PiniaSsr);
+Vue.use(PiniaVuePlugin)
export default context => {
+ const pinia = createPinia()
const app = new Vue({
// other options
+ pinia
})
context.rendered = () => {
// pass state to context
- context.piniaState = getRootState(context.req)
+ context.piniaState = pinia.state.value
};
- return { app }
+ return { app, pinia }
}
setActiveReq()
和 getActiveReq()
已分别被 setActivePinia()
和 getActivePinia()
替换。setActivePinia()
只能传递使用 createPinia()
创建的 pinia
实例。**请注意,大多数情况下您不会直接使用这些函数**。