亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Vue組件間通信 Vuex的用法解析

2019-11-19 11:04:43
字體:
來源:轉載
供稿:網友

上回說到Vue組件間通訊,最后留了一個彩蛋~~~Vuex。Vuex是另一種組件通訊的方法,這節來說說Vuex(store倉庫)。

首先Vuex需要安裝,安裝的方式有很多,在這里就不一一細說了。我是通過npm方式安裝的:

npm install vuex --save

安裝好之后需要再main.js里全局引入:

import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)new Vue({el:'#app',store,components: { App },template: '<App/>'})

這樣就完成了Vuex的安裝。接下來就是Vuex的用法了:

Vuex有五個屬性:State、Getter、Mutation、Action、Module。

1. State里放入的是倉庫的數據,類似于js里的data:

import Vue from 'vue'const modules = { state:{ name: '小白' } namespaced: true}export default modules

把Vuex放入src下的store文件里,建一個新的組件modules,然后把他拋出來,被引入所需數據的組件:

<script>import { mapState }from 'vuex'export default { computed:{ // name(){ // return this.$store.state.name // } ...mapState(['name']) }, mounted(){ console.log(this.name) }}</script>

Vuex里的數據需要從計算屬性(computed)里獲取,我寫了兩種我常用的方法,都可以接收到數據,在mounted鉤子里打印出的數據:

這里只是舉個例子教大家如何用,不建議大家向我這樣去寫,Vuex應該用于所有業務邏輯的數據。不涉及到業務邏輯的,建議大家用上一章的方法:Vue組件間通信。

2. Getters里放入State里數據的擴展數據,可以把它當作計算屬性。比如State里有一個數組,就可以從Getters里獲取到數組的長度,或是取到對象里面的屬性,用法和計算屬性類似:

import Vue from ‘vue'const modules = { state:{ list:[  {id :1,content: '第一條'},  {id :2,content: '第二條'} ] }, getter:{ listLength: (state)=>{return state.list.length} },   namespaced: true}export default modules;

我在state里存了一個數組,然后getters計算出state里數組的長度,接下來就是在組件里接收了:

<script>import { mapGetters } from 'Vuex'export default { compoted:{ ...mapGetters(['listLength']) }, mounted(){ console.log(this.listLegth) }}</script>

打開控制臺打印出2,就是list數組的長度。

3. Mutations是保存在倉庫的方法,這個方法只能用來改變state里面的數據,而且想要改變state里的數據只能用mutations里的方法,并且它里面的方法只能是同步的:

import Vue from 'vue'const modules = { state:{ name: '小黑' }, mutations:{ changeName(state){  state.name = '小白' } }, namespaced: true}export default modules;

還是那個例子,下面是組件調用方法:

<html><div> {{ name }} <el-button @click="changeName">改變名字</el-button></div></html><script>import { mapState,mapMutations } from 'vuex'export default { compoted:{ ...mapState(['name']) }, methods:{ ...mapMutations(['changeName']) }}</script>

頁面渲染后為:

點擊按鈕之后為:

組件里的按鈕通過調用Vuex里的mutation方法將Vuex里的state數據改變,只不過mutations方法只能同步的,涉及到接口的就不能在它里面寫,怎么辦的?往下看:

4. Actions和mutations一樣都是Vuex里的方法,只不過他們有兩個最大的不同:

(1) Actions里可以存放異步方法,而Mutations只能放同步的;

(2) Actions里不可以更改state里的數據,state里的數據只能在Mutations里更改。

Actions是什么方法?簡單的說,它就是一個Promise方法,通過不同的狀態執行不同的方法,執行方法可以是Actions里的方法,也可以是Mutations里的方法。

Actions我就不舉例子了,因為大部分都用于axios請求接口,簡單跟大家說說這個東西怎么使用:

import Vue from 'vue'import request from '@/api/axios'const modules = { state:{ list:[] }, actions:{ getList({ commit }){  // 調用接口方法  request.getList()  .then((response)=>{  // commit用來分配mutations方法  commit('getList',response)  }) } }, mutations:{ getList(state,response){  state.list = response.data } }}

簡單利用actions異步方法分配給mutations方法,然后在mutations方法里給state里的數據賦值,取到接口數據。

commit用于分配mutations方法,dispatch用于分配actions方法,都需要傳參進去。

組件調用其實和調用mutations方法類似:

<script>import { mapState,mapActions } from 'vuex'export default { computed:{ ...mapState(['list']) }, mounted(){ this.getList() }, methods:{ ...mapActions(['getList']) }}</script>

這樣就基本完成了vuex傳值。

5. module可以把vuex分為不同的模塊,使業務邏輯變得更清晰,更準確。在上面的代碼里,有const modules,給它不同的名字就是分為不同的模塊。不同的module可以存入不同的數據和方法,使用起來非常方便。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久久久中文字幕大豆网| 国产精品日韩在线| 日韩中文字幕亚洲| 久久精品亚洲国产| 国产精品高潮呻吟久久av黑人| 97超级碰在线看视频免费在线看| 精品亚洲一区二区| 国产精品一区二区av影院萌芽| 国产欧美婷婷中文| 日韩免费观看在线观看| 欧美日韩亚洲视频一区| 亚洲第一视频在线观看| 国产日韩换脸av一区在线观看| 久久综合九色九九| 2021久久精品国产99国产精品| 亚洲国产天堂网精品网站| 国产精品高潮呻吟久久av野狼| 日韩精品亚洲视频| 在线日韩第一页| 97精品国产97久久久久久春色| 91精品国产电影| 成人激情在线播放| 92国产精品久久久久首页| 久久精品亚洲精品| 久久久精品久久| 欧美高清一级大片| 欧美色视频日本版| 成人免费观看网址| 久久国产精品久久国产精品| 日韩中文字幕网址| 亚洲黄色www| www国产精品com| 亚洲а∨天堂久久精品9966| 国产一区私人高清影院| 久久久久久尹人网香蕉| 亚洲精品午夜精品| 欧美大片在线看| 欲色天天网综合久久| 日韩成人激情影院| 97国产精品免费视频| 亚洲人成网站色ww在线| 欧美性生交xxxxxdddd| 精品国产91久久久久久老师| 亚洲视频axxx| 中文字幕亚洲综合| 久久中国妇女中文字幕| 91国在线精品国内播放| 日韩亚洲欧美中文高清在线| 国产aⅴ夜夜欢一区二区三区| 57pao国产成人免费| 精品视频在线观看日韩| 成人性教育视频在线观看| 国产精品视频永久免费播放| 日韩免费在线免费观看| 国产一区玩具在线观看| 亚洲国产又黄又爽女人高潮的| 26uuu亚洲伊人春色| 欧洲亚洲妇女av| 精品福利在线看| 亚洲成人网久久久| 深夜福利一区二区| 亚洲第一福利在线观看| 国产精品主播视频| 精品视频久久久| 欧美一区二区三区……| 国产亚洲精品久久久久久牛牛| 最近2019免费中文字幕视频三| 在线电影中文日韩| 国产精品嫩草影院一区二区| 欧美日韩成人在线视频| 欧美一区二区三区……| 欧美亚洲激情视频| 欧美高清一级大片| 国产精品成av人在线视午夜片| 久久精品国产精品| 欧美成年人网站| 国产成人一区二区三区小说| www.日韩av.com| 3344国产精品免费看| 亚洲国语精品自产拍在线观看| 欧美乱妇40p| 亚洲性69xxxbbb| 亚洲国产日韩欧美在线图片| 国产精品wwww| 日韩欧美一区二区三区| 亚洲精品www久久久久久广东| 成年无码av片在线| 国产精品日本精品| 日韩av一区二区在线观看| 97在线视频免费观看| 免费不卡在线观看av| 亚洲va电影大全| 国模精品视频一区二区三区| 亚洲精品中文字| 日本精品视频在线| 国产精品18久久久久久麻辣| 国产成人一区二区在线| 亚洲欧美在线看| 中文字幕日韩在线观看| 欧美色另类天堂2015| 亚洲一区二区三区视频播放| 欧美高清激情视频| 亚洲一品av免费观看| 成人激情视频在线| 亚洲精品v欧美精品v日韩精品| 亚洲欧美一区二区三区在线| 日韩黄色在线免费观看| 神马久久久久久| 欧美理论在线观看| 国产玖玖精品视频| 亚州精品天堂中文字幕| 日韩成人在线观看| 亚洲电影免费观看| 麻豆一区二区在线观看| 日韩av中文字幕在线免费观看| 日本国产一区二区三区| 日韩av三级在线观看| 国产精品一区二区三区久久| 久久免费国产视频| 91精品久久久久久久久| 91精品视频免费| 欧美超级免费视 在线| 久久国产精品久久久| 亚洲伊人久久大香线蕉av| 亚洲国产成人久久综合一区| 国产精品亚洲网站| 日韩精品中文字幕在线播放| 国产精品免费久久久久影院| 97精品视频在线观看| 亚洲大尺度美女在线| 久久青草精品视频免费观看| 中文字幕亚洲字幕| 中文欧美在线视频| 青青在线视频一区二区三区| 亚洲精品视频在线播放| www.色综合| 久久综合伊人77777尤物| xx视频.9999.com| 色偷偷888欧美精品久久久| 久热爱精品视频线路一| 欧美俄罗斯性视频| 久久影院在线观看| 亚洲一区av在线播放| 国产99久久久欧美黑人| 久久在精品线影院精品国产| 欧美大全免费观看电视剧大泉洋| 国产欧美一区二区三区久久| 久久国产一区二区三区| 美女999久久久精品视频| 97国产一区二区精品久久呦| 中文字幕在线国产精品| 久久视频在线播放| 欧美又大又硬又粗bbbbb| 国产成人精品优优av| 精品综合久久久久久97| 亚洲男人天堂九九视频| 国产精品视频一区二区三区四| 欧美影院成年免费版| 国产精选久久久久久| 麻豆一区二区在线观看| 亚洲精品久久在线| 久久伊人精品一区二区三区| 亚洲视频在线免费观看| 亚洲iv一区二区三区|