跳至内容

从 0.0.7 迁移

0.0.7 之后的版本:0.1.00.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 属性(idpatchreset 等)现在都以 $ 为前缀,以便允许在 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 实例。**请注意,大多数情况下您不会直接使用这些函数**。