激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - vue.js - 一文輕松理解Vuex

一文輕松理解Vuex

2022-03-10 16:29有夢想的咸魚前端 vue.js

這篇文章主要介紹了Vuex及其使用方法,感興趣的同學,可以參考下

概述

Vuex 是一個專為 Vue.js 應用程序開發(fā)的狀態(tài)管理模式(官網(wǎng)地址:https://vuex.vuejs.org/zh/)。它采用集中式存儲管理應用的所有組件的狀態(tài),并以相應的規(guī)則保證狀態(tài)以一種可預測的方式發(fā)生變化。

換成我們大白話來說:Vuex就是一個狀態(tài)管理模式,可以簡單的理解為一個全局對象,然后我們可以修改這個全局對象里面的屬性或者添加方法,但是我們不能像傳統(tǒng)JS的那種直接賦值形式來修改,我們必須得按照Vuex給我們提供的規(guī)則來修改;

Vuex的存在就是應用于解決各個組件之間傳值的問題的,說白了就是看我們傳統(tǒng)的vue父子組件傳值麻煩以及弊端所給我們帶來的福利;這一點官網(wǎng)說的很清楚:

一文輕松理解Vuex

提示:本文將以模塊導入導出的形式來使用vuex,本文略微有點長,希望耐心的看完,當然有條件的話跟著敲一遍效果會更好!

Vuex四大對象

分別是state、mutations、getters、actions;

state:Vuex中的數(shù)據(jù)源,我們所需要的公共數(shù)據(jù)都是存儲在這,可以簡單理解為一個透明的倉庫,可以通過this.$store.state.變量名來訪問這個倉庫里面的數(shù)據(jù)源;

mutations:mutations相當于是這把倉庫的鑰匙,只有通過提交mutations才能進行修改數(shù)據(jù)源操作,也就是說你想更改這個倉庫里面的數(shù)據(jù)就只有通過mutations來進行修改(this.$store.commit("方法名"));

getters:getters類似于vue中的computed屬性,getters的返回值會根據(jù)state中所依賴的值的狀態(tài)修改來進行改變,如果getters中依賴的state中的值沒有變化,直接讀的是緩存,如果有變化這里也會發(fā)生相應的變化,可以用于監(jiān)聽state的值的變化;這里的getters可以理解為state這個倉庫的保安,如果state的數(shù)據(jù)發(fā)生變化,這個保安就會采取相應措施進行相應變化,如果沒有發(fā)生變化,則啥事沒有則繼續(xù)混吃等死(哈哈哈,不知道比喻恰不恰當,但是是這個意思,大家理解就好,別杠精)

actions:actions和mutations很類似,只是mutations官方規(guī)定只能進行同步操作,而actions里是可以進行異步操作的;也就是說我們需要進行異步操作需要在actions中來進行,然后就是actions提交的是mutations,而不是直接修改狀態(tài)的,也就是說進入這個倉庫修改數(shù)據(jù),要先去拿到鑰匙才能修改,所以actions是提交給mutations再去執(zhí)行mutations的方法的:

state的用法

首先我們新建一個項目,搭建vue的環(huán)境我們這里就不多贅述了,畢竟本文是講述vuex的;先在項目中安裝vuex:

安裝vuex命令:npm install vuex --save

安裝完vuex之后我們在src的目錄下新建一個vuex文件夾,同時在vuex文件夾中新建一個store.js文件:

store.js:  

import Vue from "vue";
import Vuex from "vuex";


Vue.use(Vuex);
const state={
  number:1
}

export default new Vuex.Store({
  state,
})

然后我們在main.js中引用store.js,并將實例化對象的時候加入store對象

main.js  

import Vue from "vue"
import App from "./App"
import router from "./router"
//引用store.js
import store from "./vuex/store"

Vue.config.productionTip = false


/* eslint-disable no-new */
new Vue({
  el: "#app",
  router,
//實例化的時候加入store對象
  store,
  components: { App },
  template: "<App/>"
})

然后修改一下我們的App.vue文件

App.vue

<template>
  <div id="app">
    <img src="./assets/logo.png">
//視圖層加數(shù)據(jù)方便觀察
    <p>{{this.$store.state.number}}</p>
  </div>
</template>

<script>
export default {
  name: "App"
}
</script>

<style>
#app {
  font-family: "Avenir", Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

一文輕松理解Vuex

通過上述代碼我們可以看到,我們在App.vue中加入了一個p標簽,vuex規(guī)定:如果我們需要讀取vuex中的數(shù)據(jù),也就是state的數(shù)據(jù)源倉庫,我們必須通過this.$store.state.變量名訪問

mutations的用法

如果我們需要修改vuex中的數(shù)據(jù)源,我們可以通過提交mutations來進行修改;

首先我們需要在我們的視圖層加個按鈕來控制:

App.js

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <p>{{$store.state.number}}</p>
    //加個按鈕觸發(fā)事件修改數(shù)據(jù)源
    <button @click="add">按鈕</button>
  </div>
</template>

<script>
export default {
  name: "App",
  methods:{
    add(){
    //要修改數(shù)據(jù)源就要根據(jù)vuex規(guī)定的方法來
      this.$store.commit("addFunction");
    }
  }
}
</script>

<style>
#app {
  font-family: "Avenir", Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
    

然后修改我們的store.js:

import Vue from "vue";
import Vuex from "vuex";


Vue.use(Vuex);
const state={
  number:1
}

//添加mutations對象,state參數(shù)能獲取到上面的state
const mutations={
  addFunction(state){
    return state.number+=1;
  }
}

//這里一定要記得要加入到實例中,不然會報錯
export default new Vuex.Store({
  state,
  mutations
})

一文輕松理解Vuex

我們可以很直觀的看到,通過this.$store.commit("方法名")來提交mutations修改數(shù)據(jù)源,當然我們的mutations也是可以接收參數(shù)的,第一個參數(shù)為mutations的方法名,第二個參數(shù)為mutations需要接收的參數(shù),這樣我們的mutations就變得更加的靈活;

getters的用法

getters類似于vue的computer用法,可以監(jiān)聽state數(shù)據(jù)源這個倉庫的數(shù)據(jù)變化,如果getters依賴state的數(shù)據(jù)發(fā)生了變化,getters中依賴的數(shù)據(jù)發(fā)生了變化state也會發(fā)生變化

首先我們可以在store.js中添加以下代碼:

import Vue from "vue";
import Vuex from "vuex";


Vue.use(Vuex);
const state={
  number:1
}

const getters={
    //通過方法觸發(fā)  state是上面的state對象,能讀取state的值
  addFunction(state){
    return state.number++;
  }
}
export default new Vuex.Store({
  state,
//這里一定要記得在實例化的時候加入對象
  getters
})

App.vue中的視圖我們可以這樣更改:

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <p>頁面的值:{{$store.state.number}}</p>
    //加入一個標簽跟頁面的值做對比
    <p>我的getters的值:{{$store.getters.addFunction}}</p>
  </div>
</template>

<script>
export default {
  name: "App",
}
</script>

<style>
#app {
  font-family: "Avenir", Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

一文輕松理解Vuex

通過上述代碼以及視圖層我們可以清晰的看到,當我們操作了getters的時候,觸發(fā)了getters的addFunction方法,addFunction方法會改變state.number的值,這個時候number的值已經(jīng)為2了,所以頁面上會顯示值為2,因為++在后,所以getters此時的值為1,也就是說當getters依賴的state.number的值在getters中發(fā)生變化的時候,state.number就會發(fā)生變化,如果state.number沒有發(fā)生變化,此時getters會優(yōu)先讀緩存;

actions的用法

actions對象里面主要是進行異步操作,類似于mutations,不同的是actions通過提交mutations來進行更改數(shù)據(jù),而不是直接變更數(shù)據(jù)狀態(tài);

首先我們可以更改store.js中的代碼:

import Vue from "vue";
import Vuex from "vuex";


Vue.use(Vuex);
const state={
  number:1
}
const mutations={
  addFunction(state){
    return state.number++;
  }
}
const getters={
  addFunction(state){
    return state.number++;
  }
}
//context是具有store實例一樣的屬性和方法的對象
const actions={
  addFunction(context){
    context.commit("addFunction");
  }
}
export default new Vuex.Store({
  state,
  mutations,
  getters,
//這里記得要在實例化的時候要加上
  actions
})

App.vue中代碼修改為:

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <p>頁面的值:{{$store.state.number}}</p>
     <button @click="add">按鈕</button>
  </div>
</template>

<script>
export default {
  name: "App",
  methods:{
    add(){
//actions中通過this.$store.dispatch來提交mutations進行修改
      this.$store.dispatch("addFunction")
    }
  }
}
</script>

<style>
#app {
  font-family: "Avenir", Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

一文輕松理解Vuex

vuex的適用場景

在項目開發(fā)中,可能會有很多數(shù)據(jù)或者參數(shù)我們可能需要多次讀取或者修改,像購物車等類似功能,這個時候我們的就可以用vuex來實現(xiàn);vuex畢竟只是一個狀態(tài)管理模式,狀態(tài)管理模式是給我們提供方便的,但不是必需的,因為狀態(tài)管理能做的事通過其他途徑和辦法也能實現(xiàn)。其實個人覺得vuex跟localStorange有點相似,都是用于存儲和修改數(shù)據(jù),為了解決跨頁面數(shù)據(jù)丟失問題;

以上就是一文輕松理解Vuex的詳細內(nèi)容,更多關(guān)于Vuex的資料請關(guān)注服務器之家其它相關(guān)文章!

原文鏈接:https://www.cnblogs.com/dengyao-blogs/p/11558098.html

延伸 · 閱讀

精彩推薦
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關(guān)資料,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個是vue的基本組件,有需要的同學可以研究下...

    yukiwu6752022-01-25
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學的同學,可能js的基礎也不是太牢固,聽起來更是吃力,那我就已個人之淺見,以大白話...

    CRMEB技術(shù)團隊7992021-12-22
  • vue.js用vite搭建vue3應用的實現(xiàn)方法

    用vite搭建vue3應用的實現(xiàn)方法

    這篇文章主要介紹了用vite搭建vue3應用的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    Asiter7912022-01-22
  • vue.jsVue2.x 項目性能優(yōu)化之代碼優(yōu)化的實現(xiàn)

    Vue2.x 項目性能優(yōu)化之代碼優(yōu)化的實現(xiàn)

    這篇文章主要介紹了Vue2.x 項目性能優(yōu)化之代碼優(yōu)化的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    優(yōu)小U9632022-02-21
  • vue.jsVue項目中實現(xiàn)帶參跳轉(zhuǎn)功能

    Vue項目中實現(xiàn)帶參跳轉(zhuǎn)功能

    最近做了一個手機端系統(tǒng),其中遇到了父頁面需要攜帶參數(shù)跳轉(zhuǎn)至子頁面的問題,現(xiàn)已解決,下面分享一下實現(xiàn)過程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
  • vue.jsVue中引入svg圖標的兩種方式

    Vue中引入svg圖標的兩種方式

    這篇文章主要給大家介紹了關(guān)于Vue中引入svg圖標的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    十里不故夢10222021-12-31
  • vue.jsVue2.x-使用防抖以及節(jié)流的示例

    Vue2.x-使用防抖以及節(jié)流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節(jié)流的示例,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
主站蜘蛛池模板: 久久久久久久久久久亚洲 | 欧美一级不卡视频 | 在线成人精品视频 | 久久亚洲国产精品 | 久久国产精品久久精品国产演员表 | 国产人成精品一区二区三 | 免费看日韩av| 91成人免费在线观看 | 日本最新免费二区三区 | 激情大乳女做爰办公室韩国 | 高清一区二区在线观看 | 大胆在线日本aⅴ免费视频 美国黄色毛片女人性生活片 | 女18一级大黄毛片免费女人 | 久草在线最新 | 国产1区视频 | 国产chinesehd精品91 | 欧美大片一级毛片 | 欧美一区二区三区四区五区动图 | 亚洲精品久久久久久 | 嫩呦国产一区二区三区av | 免费毛片视频 | 石原莉奈日韩一区二区三区 | 视频一区二区中文字幕 | 91网站在线观看视频 | 精品一区二区三区在线观看国产 | 免费黄色在线观看网站 | 国产亚洲精品久久久久久久 | 欧美日韩亚洲不卡 | 精品中文字幕久久久久四十五十骆 | 操碰| av中文字幕免费在线观看 | 亚洲午夜久久久精品一区二区三区 | 一级美女大片 | 特级黄色影院 | 一级在线观看视频 | 麻豆蜜桃在线观看 | sese在线视频 | 91短视频免费 | 中文字幕精品在线视频 | 亚洲aⅴ在线观看 | 爱高潮www亚洲精品 国产精品一区自拍 |