vue --- [全家桶] Vuex

1. Vuex 概述

1.1 組件之間共享數據的方式

  • 父向子傳值: v-bind 屬性綁定
  • 子向父傳值: v-on 事件綁定
  • 兄弟組件之間共享數據: EventBus
  • $on: 接收數據的那個組件
  • $emit: 發送數據的那個組件

1.2 Vuex是什么

Vuex: 是實現組件全局狀態(數據)管理的一種機制,可以方便的實現組件之間數據的共享

1.3 使用Vuex統一管理狀態的好處

  1. 能夠在vuex中集中管理共享的數據,易于開發和后期維護
  2. 能夠高效地實現組件之間地數據共享,提高開發效率
  3. 存儲在vuex中的數據都是響應式的,能夠實時保持數據與頁面的同步

[vuex中存儲的數據] : 一般情況下,只有組件之間共享的數據,才有必存儲到vuex中;對于組件中私有數據,依舊存儲在組件自身的data即可

2. Vuex的基本使用

  • 安裝vuex依賴包
npm install vuex --save
  • 導入vuex包
import Vuex form 'vuex'
Vue.use(Vuex)
  • 創建store對象
const store = new Vuex.store({state: { count: 0 }
})
  • 將store對象掛在到vue實例中
new Vue({el: "#app",render: h => h(app),router,store
})

3. Vuex的核心概念

3.1 State

State提供唯一的公共數據源,所有共享的數據都要統一放到Store的State中進行存儲

// 創建store數據源,提供唯一公共數據
const store = new Vuex.Store({state: { count: 0 }
})

組件訪問State中數據的第一種方式:

this.$store.state.全局數據名稱

組件訪問State中數據的第二種方式

// 1. 從 vuex中按需導入mapState函數
import { mapState } from 'vuex'// 2. 將全局數據,映射為當前組件的計算屬性
computed: {...mapState(['count'])
}

3.2 Mutation

  • Mutation用于變更Store中的數據,不推薦以下做法改變全局數據(this.$store.state.count)
<template><div><h3>當前最新的count值為: {{$store.state.count}} </h3><button @click="btnHandler1">+1</button></div>
</template>
<script>
export default {data() {return {}},methods: {btnHandler1() {this.$store.state.count++}}
}
</script>
  1. 只能通過mutation變更store數據,不可以直接操作Store中的數據
  2. 這種方式可以集中監控所有數據的變化

3.2.1 $store.commit

// 定義Mutation
const store = new Vuex.Store({state: {count: 0},mutations: {add(state) {// 變更狀態state.count++}}
})// 觸發mutation
methods:{handle1() {this.$store.commit('add')}
}

可以在觸發mutations時傳遞參數:

// 定義mutation
const store = new Vuex.Store({state: {count: 0},mutations: {addN(state, step){// 變更狀態state.count += step}}
})// 觸發mutation
methods:{handle2(){this.$store.commit('addN', 3)}
}

3.2.2 mapMutations

// 1. 從vuex中按需導入mapMutations函數
import { mapMutations } from 'vuex'// 2. 將指定的mutations函數,映射為當前組件的methods函數
methods:{...mapMutations(['add','addN'])
}

3.3 Action

3.3.1 $store.dispatch

  • Action用于處理異步任務
  • 如果通過異步操作變更數據,必須通過Action,而不能使用Mutation,但是在Action中還是要通過觸發Mutation的方式間接變更數據
// 定義action
const store = new Vuex.Store({mutations: {add(state) {state.count++}},actions: {addAsync(context) {setTimeout(()=>{context.commit('add')}, 1000)}}
})// 觸發action
methods{handle(){this.$store.dispatch('addAsync')}
}
  • 攜帶參數的actions異步任務
// 定義Action
const store = new Vuex.Store({mutations: {addN(state, step) {state.count += step}},actions: {addNAsync(context, step){setTimeout(()=>{context.commit('addN', step)}, 1000)}}
})
// 觸發Action
methods:{handle(){this.$store.dispatch('addNAsync', 5)}
}

3.3.2 mapActions

// 1. 從 vuex中按需導入 mapActions函數
import { mapActions } from 'vuex'// 2. 在methods中使用
methods:{...mapActions['addAsync','addNAsync']
}

3.4 Getter

3.4.1 $store.getters

  • 用于對Store中的數據進行處理形成新的數據
    • 可以對Store中已有的數據加工處理之后形成新的數據,類似Vue的計算屬性
    • Store中數據發生變化,Getter的數據也會跟著變化
const store = new Vuex.Store({state: {count: 0},getters:{showNum: state => {return '當前最新的數量是['+ state.count +']'}}
})
<!-- 調用 -->
<template><h3>{{$store.getters.showNum}}</h3>
</template>

3.4.2 mapGetters

import { mapGetters } from 'vuex'computed: {...mapGetters(['showNum'])
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250304.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250304.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250304.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#/WPF程序開機自動啟動

最近一個C/S項目客戶要求開機自啟的功能&#xff0c;網上找了一些方法&#xff0c;不頂用&#xff1b;最后自己去翻書&#xff0c;找到了這段代碼&#xff0c;親測可用&#xff0c;Wpf環境下需要改下獲取程序目錄的方式即可&#xff0c;Winform直接可用。 1 #regio…

github --- 多個項目的管理方式

1. 多個項目管理方式 進入項目根目錄: git init 將當前的項目添加到暫存區中: git add . (注意: 最后有一個點) 將暫存區的內容放到本地倉庫: git commit -m 初始化項目 登錄github , 新建遠程倉庫 在本地添加遠程倉庫的源: git remote origin https://github.com/Lizhhhh/…

記錄一個坑

導入項目后運行控制臺打印異常,pom都已檢查,沒有任何問題 解決辦法: 項目右擊---properties---deployment assembly---add---java build path entries---maven deoendencies 保存并關閉 解決... 這個問題第一次遇到 檢查了很多遍maven的依賴,明明都已經配置好了 ,仍然產生了…

洛谷 P4011 孤島營救問題【最短路+分層圖】

題外話&#xff1a;昨夜腦子昏沉&#xff0c;今早一調試就過了...錯誤有&#xff1a;我忘記還有墻直接穿墻過...memset初始化INF用錯了數...然后手殘敲錯一個狀態一直過不了樣例...要是這狀態去比賽我簡直完了......orz 題目鏈接&#xff1a;https://www.luogu.org/problemnew/…

輸出控制臺信息到日志 并 通過cronolog對tomcat進行日志切分

windows下tomcat默認并不會把控制臺輸出的信息都記錄進日志文件。但是在生產環境中&#xff0c;出現問題時&#xff0c;控制臺的日志輸出是無法查據的&#xff0c;因此需要將日志記錄下來。 解決方法&#xff1a; 輸出日志到文件 修改tomcat的bin目錄下的startup.bat文件&#…

微信小程序 --- [筆記小結] 環境搭建,基礎學習

說明 源代碼拷貝源代碼 git clone https://github.com/Lizhhhh/miniProgram.git進入目錄cd miniProgram查看tag: git tag選擇需要查看的知識點,如: git checkout 02_Text 學習的視頻失效了…后續還會找資源學習… 小程序 地址 一種不需要下載安裝即可使用的應用,它實現了應…

監聽發現局域網dropbox客戶端broadcast-dropbox-listener

監聽發現局域網dropbox客戶端broadcast-dropbox-listenerDropbox是一款網盤文件同步工具。為了實現局域網內同步&#xff0c;該工具會通過UDP 17500端口發送廣播包。Nmap的broadcast-dropbox-listener腳本可以監聽局域網內dropbox客戶端發送的廣播包&#xff0c;并顯示客戶端的…

tornada-數據庫

數據庫 torndb安裝連接初始化執行語句 executeexecute_rowcount查詢語句 getquery與Django框架相比&#xff0c;Tornado沒有自帶ORM&#xff0c;對于數據庫需要自己去適配。我們使用MySQL數據庫。 在Tornado3.0版本以前提供tornado.database模塊用來操作MySQL數據庫&#xff0c…

使用Puppeteer進行數據抓取(一)——安裝和使用

Puppeteer 是 Google Chrome 團隊官方的Chrome 自動化工具。它本身是基于Chrome Dev Protocol協議實現的&#xff0c;但它提供了更高層次API封裝&#xff0c;使用起來更加方便快捷。加上google這個大咖加官方的背景&#xff0c;更使得其地位更是提升了不少。 我之前在文章使用C…

讀書筆記 --- [基礎知識點] 小結1

1. TCP,UDP區別 TCPUDP基于有連接基于無連接對系統資源要求較多對系統資源要求少程序比較復雜程序結構比較簡單流模式數據報模式保證數據的準確性不保證數據的準確性保證數據的順序不保證數據的順序 2. OSI七層模型以及tcp/ip四層模型 OSI七層模型tcp/ip四層模型常用的5層模型…

連讀

一、輔音元音的連讀 單詞的音標以輔音結尾&#xff0c;下一個單詞以元音開頭。 1、/n/ /?/ 連讀后就餓會發出“呢” 這個音&#xff1b; 2、/v/ /?/ son of a bitch 3、/t/ // 4、/t/ /?:/ 差不多是 tall 這個音 not at all 5、/l/ /?/ call it a day // 今天就到…

讀書筆記 --- [基礎知識點] 小結2

1. TCP和UDP的區別 \TCPUDP是否連接面向連接無連接是否可靠可靠不可靠連接對象個數1對11對1 或1 對多傳輸方式面向字節面向報文首部開銷20字節8字節使用場景可靠傳輸,如: 文件傳輸實時應用(IP電話、視頻會議、直播等) 2. WebSocket (1)什么是WebSocket? WebSocket是HTML5中的…

Spring差缺補漏

Spring差缺補漏 Spring4.0新特性 1&#xff1a;全面支持java1.8 2&#xff1a;空指針 RequestMapping("/user") public User getUser(String id,Option<String> userName){} 3&#xff1a;泛型依賴注入 public abstract class BaseService<M extends Serial…

tar壓縮/解壓用法

格式&#xff1a;tar zcvf 壓縮后的路徑及包名 你要壓縮的文件 z:gzip壓縮 c:創建壓縮包 v:顯示打包壓縮解壓過程 f:接著壓縮 t:查看壓縮包內容 x:解壓 X:指定文件列表形式排除不需要打包壓縮的文件或目錄 -exclude:指定排除文件或目錄不需要打包壓縮的文件或目錄&#xff08;也…

讀書筆記 --- [基礎知識點] 小結3

1. cookie與session的區別 參考 cookie機制 Cookie是服務器在本地機器上存儲的小段文本,并隨每一次發送至同一個服務器。網絡服務器用HTTP頭向客戶端發送cookies,在客戶端中,瀏覽器解析這些cookies并將它們保存為一個本地文件,它會自動將同一服務器的任何請求束縛上這些cook…

SPI接口比IIC速度快的理解

http://bbs.21ic.com/icview-279512-1-1.html I2C 的長處是超級低廉&#xff0c;而且是協議簡單的總線。spi是端口&#xff0c;不是總線。 USB協議復雜。I2C因為跨電平的標準&#xff0c;所以是OC 上拉的&#xff0c;上拉高電平驅動能力很弱&#xff0c;所以決定了他跑不快。但…

運維基礎測試題

運維基礎測試題 一、選擇題 1、管道符 ”|” 的作用是 A 將前一個命令的標準輸入作為后一個命令的標準輸出 B 將前一個命令的標準輸出作為后一個命令的標準輸入 2、終止一個后臺進程需要用到哪個命令 A cp B kill C ctrlc D mv 3.Linux查看文件的命令&#xff0c;若希望…

解決phpmyadmin 遇見的問題

1、phpmyadmin4.8.3 上傳到網站目錄后提示解決phpmyadmin mysqli_real_connect(): (HY000/2002): No such file or directory的錯誤&#xff0c; 解決方法把phpmyadmin目錄中的配置文件config.sample.inc.php改成config.inc.php&#xff0c;并把 $cfg[Servers][$i][host] loc…

javascript --- 對象屬性的深層次獲取

現有對象如下 let obj {a: {b:{c:{d:Marron}}} }想通過一個方法,輸入該對象和路徑a.b.c.d獲取Marron的值 【思路】: 首先使用split數據,將a.b.c.d變為[a, b, c, d]然后使用shift()方法每次取出最前面的屬性名,存放在prop中新建一個res對象,讓res res[prop] 現假設有一函數…

淺談mysql

因為本地mysql服務的命名是mysql57&#xff0c;所以在終端啟動和關閉mysql的時候&#xff0c;我們這么寫&#xff0c; net stop mysql57 ;net start mysql57;如圖所示 接著輸入mysql -u -root -p&#xff1b; 然后輸入自己的密碼&#xff1b; 查看有多少個庫 show database…