92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

Vue+Electron下Vuex的Dispatch沒有效果的解決方案

2019-5-16    seo達人

如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

這個問題是解決基于 vue 和 electron 的開發中使用 vuex 的 dispatch 無效的問題,即解決了 Please, don't use direct commit's, use dispatch instead of this. 問題。

先允許我梳理一下目錄結構,以便閱讀的時候不會一頭霧水,你到底說的這個文件是哪個……



其中 /src/main 是存放主配置文件的,/src/render 下面有 store、router、components 等。

components 下面就是很多 .vue 文件,router 下面就是一些路由配置的 js 文件和一些攔截器的 js。

關鍵是 store,store 下面有一個 index.js 的主配置文件 index.js,和一個 modules 文件夾。

index.js 里面寫的是(記住這句話,后面會用到):

import Vue from 'vue'
import Vuex from 'vuex'

import { createPersistedState, createSharedMutations } from 'vuex-electron'

import modules from './modules'

Vue.use(Vuex)

export default new Vuex.Store({
  modules,
  plugins: [
    createPersistedState(),
    createSharedMutations()
  ],
  strict: process.env.NODE_ENV !== 'production'
})

而 modules/ 下面存放各個實體,例如上圖中的 Auth.js 和 Counter.js,并通過 index.js 全部引入。

/**
 * The file enables `@/store/index.js` to import all vuex modules
 * in a one-shot manner. There should not be any reason to edit this file.
 */

const files = require.context('.', false, /\.js$/)
const modules = {}

files.keys().forEach(key => {
  if (key === './index.js') return
  modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default
})

export default modules


然后來看一個 vuex 的官方樣例:

const state = {
  main: 0
}

const mutations = {
  DECREMENT_MAIN_COUNTER (state) {
    state.main--
  },
  INCREMENT_MAIN_COUNTER (state) {
    state.main++
  }
}

const actions = {
  someAsyncTask ({ commit }) {
    // do something async
    commit('INCREMENT_MAIN_COUNTER')
  }
}

export default {
  state,
  mutations,
  actions
}


之后很顯然的,我想要在 Vue 的組件調用 INCREMENT_MAIN_COUNTER 對計數器加 1。

this.$store.commit('INCREMENT_MAIN_COUNTER');
// this.$store.commit('INCREMENT_MAIN_COUNTER', payload);
1
2
如果是一般的 vue,就 OK 了,但是,我遇到了報錯,說,Please, don't use direct commit's, use dispatch instead of this.



那好吧,沒事,不就是不然用 Commit,非要用 Dispatch 嘛,那我就寫一個 Action,里面直接調用 Mutation,就像這個樣子:

const actions = {
  JUST_INCREASE ({ commit }) {
    commit('INCREMENT_MAIN_COUNTER')
  }
}
1
2
3
4
5
然而奇怪的事情是,this.$store.dispatch('JUST_INCREASE') 并不能運行,沒反應,計數器還是 0,不能賦值,就像是這個函數沒有被執行一樣。沒有報錯,沒有任何異常,查也查不出什么問題。





網上的資料似乎也挺少。

折騰了很久,后來發現是 vuex-electron 里面一個插件的鍋。

解決方法有兩個。

方法一:

在 store/index.js 里面,就是上文特別強調了的那個文件,去掉 createSharedMutations 插件。

import Vue from 'vue'
import Vuex from 'vuex'

import { createPersistedState, createSharedMutations } from 'vuex-electron'

import modules from './modules'

Vue.use(Vuex)

export default new Vuex.Store({
  modules,
  plugins: [
    createPersistedState(),
    createSharedMutations() // 注釋掉這一行
  ],
  strict: process.env.NODE_ENV !== 'production'
})


這是因為 vuex-electron 引入了一個用于多進程間共享 Vuex Store 的狀態的插件。如果沒有多進程交互的需求,完全可以不引入這個插件。

注釋掉以后重啟項目,用 this.$store.commit('XXX') 就可以使用了。

然而,如果需要多進程來處理怎么辦?

方法二:

https://github.com/vue-electron/vuex-electron#installation

看第 3 條:

In case if you enabled createSharedMutations() plugin you need to create an instance of store in the main process. To do it just add this line into your main process (for example src/main.js):

import './path/to/your/store'
1
這種時候就不能用第一種方法來解決問題了。

好在文檔也說了,加上一行導入。

找到 /src/main/index.js,在前面加上一句:

import '../renderer/store'
1


之后一切正常,可以使用 Dispatch 來進行操作了。



最后還有一個比較奇怪的問題:



在直接調用 state 的時候,這樣寫 this.$store.state.loginStatus 是不行的,會 undefined,必須寫成 this.$store.state.Auth.loginStatus,就像是 this.$store.state.Counter.main 一樣,似乎可以解釋為,不同的模塊不指定名字的話就找不到。

但是,在寫 Dispatch 的時候又不需要指定名字了,直接 dispatch('changeLoginStatus') 就行了,不然難道不應該是也按照 dispatch('Auth/changeLoginStatus') 這樣子來寫嘛……
藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、網站建設 、平面設計服務。

日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
2020国产成人综合网| 1区1区3区4区产品乱码芒果精品| 亚洲欧美精品一区| 色哟哟欧美精品| 欧美疯狂xxxx大交乱88av| 777午夜精品视频在线播放| 欧美日韩国产精品成人| 一区二区三区在线观看动漫| av一区二区三区| 免费h视频在线观看| 亚洲国产中文在线二区三区免| 成年人黄色大片在线| 亚洲精品乱码久久久久久蜜桃麻豆| 大地资源网3页在线观看| 欧美人与物videos另类| 中文字幕在线直播| 亚洲黄页网在线观看| av中文字幕电影在线看| 亚洲欧美国产不卡| 香蕉久久夜色精品国产使用方法| 欧美一级免费视频| 99精品视频中文字幕| 国内免费久久久久久久久久久| 精品在线观看入口| 欧美一a一片一级一片| 自拍偷拍欧美精品| 成人情视频高清免费观看电影| 中文字幕一区二区三区四区久久| 偷窥自拍亚洲色图精选| 亚洲午夜精品久久久久久性色| http;//www.99re视频| 91精品国产综合久久香蕉的用户体验| 伊人久久大香线蕉av超碰| 亚洲国产视频二区| 精品欧美一区二区三区| 伊人久久综合一区二区| 91精品国产九九九久久久亚洲| 久久久国产在线视频| 97**国产露脸精品国产| 国模极品一区二区三区| 亚洲欧洲中文日韩久久av乱码| 欧美一进一出视频| 91精品国产自产在线观看永久| 亚洲激情精品| www.亚洲免费视频| 亚洲国产午夜伦理片大全在线观看网站| 色拍拍在线精品视频8848| 色悠悠久久综合| 伊人久久综合| 欧美成人剧情片在线观看| 999国产在线视频| 亚洲国产私拍精品国模在线观看| 国产亚洲精品久久久久动| 中文字幕一区二区三区日韩精品| 欧美日韩一区二区三区高清| 亚洲综合成人在线| 日韩久久免费视频| 久久久久久久久一区| 99精品中文字幕在线不卡| 中文字幕系列一区| 久久久影院一区二区三区| 福利视频一区| 蜜桃视频一区| 国产精品一区二区三区毛片淫片| 欧美一激情一区二区三区| 素人av在线| 中文字幕av一区二区| 91免费国产视频网站| 99精品国产91久久久久久| 激情五月综合色婷婷一区二区| 国产一区二区在线影院| 热三久草你在线| 成人激情电影一区二区| 麻豆精品国产91久久久久久| 日韩不卡一区二区| 影音先锋欧美激情| 成人av在线播放| 丰满少妇久久久久久久| 中文字幕国产精品| √新版天堂资源在线资源| 一本色道久久加勒比精品| 美女任你摸久久| 国产成人免费高清| 亚洲小说图片视频| 国产一区二区三区高清在线观看| 欧美一级片在线播放| 色八戒一区二区三区| 91国偷自产一区二区使用方法| 日韩av在线免费播放| 波多野结衣在线一区二区| 亚洲无吗在线| 欧美三区美女| 欧美日韩国产在线一区| 欧美日韩激情视频| 91福利国产精品| 欧美特级限制片免费在线观看| 香蕉一区二区| 草莓视频丝瓜在线观看丝瓜18| 亚洲三级影院| 狠狠爱在线视频一区| 色综合久久中文综合久久97| 国产午夜精品全部视频播放| 亚洲色图清纯唯美| 黄色网在线免费看| 亚洲自拍偷拍av| 午夜av在线免费观看| 亚洲免费激情| **日韩最新| 亚洲亚洲一区二区三区| 中文久久乱码一区二区| 国产精久久久| 国产福利小视频在线| 日本电影在线观看网站| 国产写真视频在线观看| 精品亚洲欧美一区| 日本蜜桃在线观看| 国产精品爽爽爽| 国产精品久久精品国产| a视频在线观看免费| 欧美一区二区三区思思人| 大胆欧美人体视频| 在线观看wwwxxxx| 91国内精品野花午夜精品| 国精一区二区| 欧美一区在线看| 7777精品久久久久久| 成人免费看黄网站| 日韩国产欧美一区| 欧美天堂在线观看| 精品三级在线观看视频| 久久日一线二线三线suv| 久久精品久久久久电影| 欧美午夜精品电影| 欧美尤物一区| 成人美女大片| 浮生影视网在线观看免费| 欧美午夜影院一区| 亚洲精品福利在线观看| 一区二区三区国产精品| 成人日韩精品| 国产露出视频在线观看| 成人在线app| 精品一区精品二区高清| 欧美www.| 在线观看欧美成人| 91高跟黑色丝袜呻吟在线观看| 日韩精品影片| 欧美另类高清videos| 美女18一级毛片一品久道久久综合| 欧美成人激情视频| 亚洲精品中文字幕| 成人美女在线视频| 日韩国产高清在线| 亚洲精品欧美二区三区中文字幕| 欧美午夜精品久久久久久蜜| 丰满少妇久久久久久久| 久久国产中文字幕| 久久国产精品露脸对白| 欧洲av在线精品| 玛丽玛丽电影原版免费观看1977| 欧美成人sm免费视频| 图片一区二区| 曰本三级在线| 99久久er热在这里只有精品15|