5分鐘帶你入門vuex(vue狀態管理)

2021-01-21 web技術分享

如果你之前使用過vue.js,你一定知道在vue中各個組件之間傳值的痛苦,在vue中我們可以使用vuex來保存我們需要管理的狀態值,值一旦被修改,所有引用該值的地方就會自動更新,那麼接下來我們就來學習一下vuex是如何修改狀態值的:

我們新建一個vue項目(這裡由於我們是講解vuex,所以對於vue項目的創建我們不會講解太詳細);在命令行輸入 vue init webpack web(使用webpack創建一個項目名為web的項目);

項目創建後,然後安裝vuex,使用命令:npm install vuex --save(安裝vuex保存到本地),安裝成功後你會看到這個界面:

然後我們執行npm run dev 啟動項目,在瀏覽器輸入:"localhost:8080";正常的話然後我們會看到項目的啟動頁,

看到這個界面說明項目啟動成功,然後我們在項目的src目錄下新建一個目錄store,在該目錄下新建一個index.js文件,我們用來創建vuex實例,然後在該文件中引入vue和vuex,創建Vuex.Store實例保存到變量store中,最後使用export default導出store:

然後我們在main.js文件中引入該文件,在文件裡面添加 import store from 『./store』;,再在vue實例全局引入store對象;

然後我們就可以開始編寫我們的vuex業務代碼了,那麼,我們的數據如何保存?

State:

vuex中的數據源,我們需要保存的數據就保存在這裡,可以在頁面通過 this.$store.state來獲取我們定義的數據;

這時候我們頁面上就得到了這個count值1:

Getters:

Getter相當於vue中的computed計算屬性,getter 的返回值會根據它的依賴被緩存起來,且只有當它的依賴值發生了改變才會被重新計算,這裡我們可以通過定義vuex的Getter來獲取,Getters 可以用於監聽、state中的值的變化,返回計算後的結果,這裡我們修改Hello World.vue文件如下:

再修改index.js文件如下,其中getters中的getStateCount方法接收一個參數state,這個參數就是我們用來保存數據的那個對象;

然後我們在頁面顯示:

Mutations:

數據我們在頁面是獲取到了,但是如果我們需要修改count值怎麼辦?如果需要修改store中的值唯一的方法就是提交mutation來修改,我們現在Hello World.vue文件中添加兩個按鈕,一個加1,一個減1;這裡我們點擊按鈕調用addFun(執行加的方法)和reductionFun(執行減法的方法),然後在裡面直接提交mutations中的方法修改值:

修改index.js文件,添加mutations,在mutations中定義兩個函數,用來對count加1和減1,這裡定義的兩個方法就是上面commit提交的兩個方法如下:

頁面上點擊+、- 按鈕操作數據:

點擊 「+」按鈕

執行成功,我們再連續點擊三次減 「-」 按鈕

ok!完美。

Actions:

我們看到,當點擊三次後值從2變成了-1;頁面上的值是改變了;我們達到了修改store中狀態值的目的,但是,官方並不介意我們這樣直接去修改store裡面的值,而是讓我們去提交一個actions,在actions中提交mutation再去修改狀態值,接下來我們修改index.js文件,先定義actions提交mutation的函數:

然後我們去修改Hello World.vue文件:

這裡我們把commit提交mutations修改為使用dispatch來提交actions;我們點擊頁面,效果是一樣的。

好了,我們這裡已經實現了一個基本的vuex修改狀態值的完整流程,如果我們需要指定加減的數值,那麼我們直接傳入dispatch中的第二個參數,然後在actions中的對應函數中接受參數在傳遞給mutations中的函數進行計算:

這個時候我們再去點擊「 - 」按鈕就會發現不再是減1了,而是減去10了。

mapState、mapGetters、mapActions

如果我們不喜歡這種在頁面上使用「this.$stroe.state.count」和「this.$store.dispatch('funName')」這種很長的寫法,那麼我們可以使用mapState、mapGetters、mapActions就不會這麼麻煩了;

我們修改Hello World.vue文件如下:

此時我們在頁面使用count1調用:

正常顯示,效果是一樣的,我們就可以不再使用很長的寫法來調用了。

更多前端學習資源請點擊:史上最全web前端資料總結

相關焦點

  • vue高級進階系列——用typescript玩轉vue和vuex
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫用過vue的朋友大概對vuex也不陌生,vuex的官方解釋是專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式存儲管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。
  • Vue全家桶之什麼是Vuex
    Vuex 是什麼?Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式存儲管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。Vuex 是幹什麼的?試想一下,如果在一個項目開發中頻繁的使用組件傳參的方式來同步data中的值,一旦項目變得很龐大,管理和維護這些值將是相當棘手的工作。
  • 在vue項目中使用vuex實現狀態管理的案例
    說明:其實如果項目不是很龐大很複雜,沒有涉及到很多狀態值需要被很多頁面或組件共用;或者某個頁面或組件的行為會對其他頁面或組件造成依賴性的影響。並不需要使用vuex。vuex的使用與否在實際開發中應該視項目情況而定。準備工作:a.在vue項目中安裝vuex: npm install vuex -S。b.了解下vuex的五個屬性。
  • vue3.0手機聊天室|Vue3+Vant3仿微信界面
    項目簡介Vue3Chat是基於vue3.x+vuex4+vue-router4全家桶技術和vant3.x構建開發的一款mobile仿微信界面聊天實例。實現了發送圖文消息、圖片|視頻預覽、位置查看、紅包|朋友圈等功能。
  • Vue+Axios+Vuex+Vux+Vue-Router全家桶搭建前端框架
    開發成本也就高了;二、再來看看React,出身名門FaceBook,社區比較多,而且還可以跨平臺運行,React-Native可以實現一次編寫,安卓、蘋果、web通殺;但是學習也需要一段時間,而且後期維護也不容易;其他的我們就不一一介紹了,最後來看看今天的重頭戲Vue;三、Vue,值得我們驕傲的是,國人發明的,一款漸進式框架,能與現有項目無縫融合,也就是說現有項目可以逐步更新替換使用vue
  • Vuex你從沒使用過的優化方案!
    本文轉載自【微信公眾號:前端人,ID:FrontendPeople】經微信公眾號授權轉載,如需轉載與原文作者聯繫在本篇文章我們將重點關注代碼拆分我們的狀態管理 - Vuex模塊的優化在我們進一步了解如何懶加載Vuex模塊之前,您需要注意一件重要的事情。
  • Vue 3 的最新進展
    尤雨溪表示,由於在 Vue 3 上花費的大部分時間都投入到了設計和構建穩定的內核上,不過要讓整個框架處於"ready"狀態,不僅僅是內核的問題,還需要有兼容版本的支持庫 (Vue Router, Vuex, test utils)、工具(CLI、eslint 插件、瀏覽器開發工具擴展、IDE 擴展)和文檔(包括針對新用戶和用於遷移的文檔)。
  • 什麼是VUE?VUE與JS的對比
    我們需要讓所有綁定的對象和元素都能感知到變化1.1.1. vue與js的對比1.1.1.1. js的實現(了解)<!/node_modules/vue/dist/vue.js"></script></head><body><!--2.
  • 供我們選擇的 Vue 組件庫還有很多!
    ElementUI作者:餓了麼團隊(現已被阿里收購)Github star:46.8k+ 屬性:PC 端組件庫簡介:內涵 55+ 個網頁開發常用組件,並且組件庫結合了 vue-cli 出了相應的插件 Element 插件,你可以用它們快速地搭建一個基於 Element 的項目。引入方式也支持了按需引入,以達到減小項目體積的目的。
  • vue-element-admin 4.0.0 正式版發布
    >npm run test:uni、 npm run new指令 使用了新的 mock 方式,解決了之前 mock 若干問題 vuex 啟用了 模塊化 namespaced 新增了 settings.js
  • 4種可用於組織大型Vue.js項目的最佳實踐
    全文共3777字,預計學習時長10分鐘你可以遵循F.I.R.S.T原則,將自己的組件構建為:專注的、獨立的、可重複使用的以及小型且可測試的。還可以使用Bit(Github)之類的工具對每個項目的組件進行獨立式原始碼管理,並將其共享給Bit的組件中心。共享的組件、自動生成的文檔和實時示例將一起顯示在Bit的組件中心上。
  • Vue.js 教程:構建一個特斯拉汽車餘電計算器
    App.vue 是應用程式的入口組件。圖下方是 App.vue 組件。列表 1項目入口點Vue 應用程式在 main.js 中啟動。在 main.js 中,你首先需要創建一個新的「root Vue 實例」。如下所示:1. 導入 Vue:從「vue」導入 Vue。
  • vue-mapvgl v0.0.10 發布,基於 Vue 2.0 和百度地圖的地圖組件
    vue-mapvgl v0.0.10 已經發布,此版本更新內容包括:vue-mapvgl是一套基於Vue 2.0和百度地圖mapvgl的地圖組件。
  • 什麼是MVVM,MVC和MVVM的區別,MVVM框架VUE實現原理
    1.如果你已經有一個現成的服務端應用,你可以將vue 作為該應用的一部分嵌入其中,帶來更加豐富的交互體驗;2.如果你希望將更多業務邏輯放到前端來實現,那麼VUE的核心庫及其生態系統也可以滿足你的各式需求(core+vuex+vue-route)。
  • a標籤 href vue專題及常見問題 - CSDN
    vue.js 實現a標籤href裡添加參數原始碼列表可以正常顯示,但是連接沒有實現對items.orderNo的值轉化,最中解決方法
  • slot vue 具名專題及常見問題 - CSDN
    vue的slot1、什麼是slotslot是插槽,插即是可以插入,槽就是坑,即是可以再代碼中插入如果子組件模板中不包含插口,那麼父組件的內容將會被丟棄。當子組件模板中有一個麼有屬性的插槽時,父組件傳入的整個內容片段,將插入到插槽所在的dom的位置,並替換掉插槽標籤本身。
  • 如何在vue項目中使用sass並設置元素樣式
    GitnpmHBuilder瀏覽器技術vue那麼,如何在vue項目中使用sass?下面利用實例說明:1、打開HBuilderX開發工具,新建項目,選擇普通項目;然後輸入項目名稱wmk,選擇vue模板,接著點擊創建按鈕
  • VUE 新語法糖魔改 JavaScript 引爭議
    前綴對應原始的 ref 對象console.log($count.value)</script><template> <button @click="inc">{{ count }}</button></templat就會被編譯成這樣:<script setup>import { ref } from 'vue'export
  • 如何寫一個vue組件專題及常見問題 - CSDN
    如何使用vue寫一個組件庫新建vue項目使用vue-cli初始化一個項目:vue init webpack VueComponentcd VueComponentnpm installnpm run dev以上就新建好了一個vue項目項目目錄首先,定義好目錄,經過觀察大多數的組件庫,基本是這樣的目錄
  • 如何創建vue項目並使用element框架中的el-select
    1、在電腦硬碟上,找到一個位置,新建一個文件夾wmn;滑鼠右鍵選擇Git Bash Here,並在Git窗口輸入cnpm install --global vue-cli命令:cnpm install --global vue-cli