iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 3
0
自我挑戰組

Vuex 學習筆記系列 第 11

[Vue.js] Vuex 學習筆記 (11) - 插件

  • 分享至 

  • xImage
  •  

插件(Plugin)

Vuex 的 store 接受 plugins 選項,這個選項露出每個 mutation 的鉤子 (hook), Vuex 插件就是一個函數,他接收 store 作為唯一參數,我們用以下範例來解釋。

使用插件的方式:

const store = new Vuex.Store({
  // ...
  plugins: [myPlugin]
});

插件的內容:

const myPlugin = store => {
  // 當 store 初始化後調用
  store.subscribe((mutation, state) => {
    // 每次 mutation 之後調用
    // mutation 的格式為 { type, payload }
  });
};

在插件內提交 mutation

在插件中不允許直接修改狀態,這類似於組件,只能通過提交 mutation 來觸發變化。

通過提交 mutation ,插件可以用來同步數據到 store ,例如同步 websocket 數據到 store。

export default function createWebSocketPlugin(socket) {
  return store => {
    socket.on("data", data => {
      // 同步數據到 store
      store.commit("receiveData", data);
    });
    store.subscribe(mutation => {
      if (mutation.type === "UPDATE_DATA") {
        socket.emit("update", mutation.payload);
      }
    });
  };
}
const plugin = createWebSocketPlugin(socket);

const store = new Vuex.Store({
  state,
  mutations,
  plugins: [plugin]
});

上一篇
[Vue.js] Vuex 學習筆記 (10) - 專案結構
下一篇
[Vue.js] Vuex 學習筆記 (12) - 嚴格模式
系列文
Vuex 學習筆記20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
advancedor96
iT邦新手 5 級 ‧ 2018-09-05 13:53:56

感謝大大!突然發現跟官方文件一樣,但還是謝謝推廣XD

我要留言

立即登入留言