回首Vue3之状态管理篇(四)

214 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

这篇文章我们来讲一些Store选项的plugins,其值是一个数组,包含应用在 store 上的插件方法。

Store选项

回首Vue3之状态管理篇(一)提到了StoreVuex4.x中的获取方式,不了解的可以传送门看一下。

plugins

当我们需要使用一些插件的时候,可以使用此选项plugins,这个选项暴露出每次 mutation 的钩子。这些插件直接接收store 作为唯一参数,可以监听 mutation(用于外部地数据持久化、记录或调试)或者提交 mutation (用于内部数据,例如 websocket 或 某些观察者)。

其实Vuex 插件就是一个函数,它接收 store 作为唯一参数:

const myPlugin = (store) => {
  // 当 store 初始化后调用
  store.subscribe((mutation, state) => {
    // 每次 mutation 之后调用
    // mutation 的格式为 { type, payload }
  })
}

使用如下:

const store = createStore({
  // ...
  plugins: [myPlugin]
})

插件中不允许直接修改状态——类似于组件,只能通过提交 mutation 来触发变化。通过提交 mutation,插件可以用来同步数据源到 store,如下:

export default function createWebSocketPlugin (socket) {
  return (store) => {
    socket.on('data', data => {
      store.commit('receiveData', data)
    })
    store.subscribe(mutation => {
      if (mutation.type === 'UPDATE_DATA') {
        socket.emit('update', mutation.payload)
      }
    })
  }
}

总结

我们需要注意的是:插件类似于组件,插件中也不允许直接修改状态,只能通过提交mutation来改变状态。

想了解更多文章,传送门已开启:回首Vue3目录篇