国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Vue】使用 Vuex 作為狀態(tài)管理

這篇具有很好參考價值的文章主要介紹了【Vue】使用 Vuex 作為狀態(tài)管理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【Vue】使用 Vuex 作為狀態(tài)管理

Vuex 是一個專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式和庫。它使用單一狀態(tài)樹,這意味著這個對象包含了全部的應(yīng)用層級狀態(tài),并且以一種相對集中的方式存在。這也意味著,通常單個項目中只有一個 Vuex store。Vuex 的核心概念和功能包括:

  1. 狀態(tài)(State):Vuex 使用單一狀態(tài)樹,即一個對象包含了整個應(yīng)用的狀態(tài)。狀態(tài)存儲是響應(yīng)式的,當(dāng) Vue 組件從 store 中讀取狀態(tài)時,若狀態(tài)發(fā)生變化,相關(guān)組件也會相應(yīng)更新。

  2. 視圖(View):Vue 組件輸出狀態(tài)的可視化表示。

  3. 行為(Actions):響應(yīng)在 view 上的用戶輸入導(dǎo)致的狀態(tài)變化。

除此之外,Vuex 還有以下幾個核心概念:

  1. Getters:允許組件從 store 中獲取狀態(tài),同時可以對狀態(tài)進(jìn)行一些預(yù)處理。

  2. Mutations:更改 Vuex 的 store 中的狀態(tài)的唯一方法是提交 mutation。Vuex 中的 mutations 非常類似于事件:每個 mutation 都有一個字符串的事件類型 (type) 和一個回調(diào)函數(shù) (handler)。

  3. Actions:類似于 mutations,不同在于它們提交的是 mutations,而不是直接變更狀態(tài)。Actions 可以包含任意異步操作。

  4. Modules:由于使用單一狀態(tài)樹,應(yīng)用的所有狀態(tài)會集中到一個比較大的對象。當(dāng)應(yīng)用變得非常復(fù)雜時,store 對象就有可能變得相當(dāng)臃腫。為了解決這個問題,Vuex 允許我們將 store 分割成模塊(module)。

Vuex 是響應(yīng)式的。當(dāng) Vue 組件從 store 中讀取狀態(tài)的時候,若 store 中的狀態(tài)發(fā)生變化,那么相應(yīng)的組件也會自動更新。這也意味著 Vuex 中的狀態(tài)不能直接改變,只能通過顯式提交 mutations 來更改。

使用案例

假設(shè)我們正在開發(fā)一個購物車應(yīng)用,用戶可以將商品添加到購物車中,查看購物車中的商品,以及清空購物車。在這個例子中,我們將創(chuàng)建一個 Vuex store 來管理購物車的狀態(tài)。

首先,你需要在你的 Vue 項目中安裝和引入 Vuex:

pnpm install vuex --save

然后,在你的 Vue 項目中創(chuàng)建一個 Vuex store:

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    cart: []
  },
  getters: {
    cartItemCount: state => {
      return state.cart.length
    },
    cartTotalPrice: state => {
      return state.cart.reduce((total, item) => {
        return total + item.price * item.quantity
      }, 0)
    }
  },
  mutations: {
    addToCart(state, item) {
      const found = state.cart.find(product => product.id === item.id)

      if (found) {
        found.quantity++
      } else {
        state.cart.push({ ...item, quantity: 1 })
      }
    },
    removeFromCart(state, item) {
      const index = state.cart.indexOf(item)
      if (index > -1) {
        state.cart.splice(index, 1)
      }
    },
    clearCart(state) {
      state.cart = []
    }
  },
  actions: {
    addToCart({ commit }, item) {
      commit('addToCart', item)
    },
    removeFromCart({ commit }, item) {
      commit('removeFromCart', item)
    },
    clearCart({ commit }) {
      commit('clearCart')
    }
  }
})

在上面的代碼中,我們定義了:

  1. State:購物車數(shù)組 cart。
  2. Getters:cartItemCount 和 cartTotalPrice 用于獲取購物車中的商品數(shù)量和總價。
  3. Mutations:addToCart、removeFromCart 和 clearCart 用于修改購物車的狀態(tài)。
  4. Actions:包裝了 mutations 的方法,這里是 addToCart、removeFromCart 和 clearCart。

最后,在你的 Vue 組件中使用這個 store:

// 在一個組件中
<script>
import { mapGetters, mapActions } from 'vuex'

export default {
  computed: {
    ...mapGetters(['cartItemCount', 'cartTotalPrice'])
  },
  methods: {
    ...mapActions(['addToCart', 'removeFromCart', 'clearCart']),
    addItemToCart(item) {
      this.addToCart(item)
    },
    removeItemFromCart(item) {
      this.removeFromCart(item)
    },
    emptyCart() {
      this.clearCart()
    }
  }
}
</script>

完整代碼

<template>
  <div class="shopping-cart">
    <h2>購物車</h2>

    <div v-if="cartItemCount === 0">
      購物車為空。
    </div>

    <div v-else>
      <ul>
        <li v-for="(item, index) in cart" :key="index">
          {{ item.name }} - {{ item.quantity }} x {{ item.price }}元
          <button @click="removeItemFromCart(item)">移除</button>
        </li>
      </ul>

      <p>總價: {{ cartTotalPrice }}元</p>

      <button @click="emptyCart">清空購物車</button>
    </div>
  </div>
</template>

<script>
import { mapGetters, mapActions } from 'vuex'

export default {
  name: 'ShoppingCart',

  computed: {
    ...mapGetters(['cartItemCount', 'cartTotalPrice']),
    cart() {
      return this.$store.state.cart
    }
  },

  methods: {
    ...mapActions(['removeFromCart', 'clearCart']),

    removeItemFromCart(item) {
      this.removeFromCart(item)
    },

    emptyCart() {
      this.clearCart()
    }
  }
}
</script>

<style scoped>
.shopping-cart {
  border: 1px solid #ddd;
  padding: 20px;
  border-radius: 5px;
  margin: 20px auto;
  width: 300px;
}

.shopping-cart h2 {
  color: #333;
}

.shopping-cart ul {
  list-style-type: none;
  padding: 0;
}

.shopping-cart ul li {
  margin-bottom: 10px;
  line-height: 1.6;
}

.shopping-cart button {
  background-color: #42b983;
  color: white;
  border: none;
  padding: 5px 10px;
  margin-left: 10px;
  border-radius: 3px;
  cursor: pointer;
}

.shopping-cart button:hover {
  background-color: #333;
}
</style>

【Vue】使用 Vuex 作為狀態(tài)管理,vue.js,前端,javascript文章來源地址http://www.zghlxwxcb.cn/news/detail-816679.html

到了這里,關(guān)于【Vue】使用 Vuex 作為狀態(tài)管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【vue3】前端應(yīng)用中使用WebSocket與服務(wù)器進(jìn)行通信并管理連接狀態(tài)。

    1、寫一個hook函數(shù) url 是WebSocket的服務(wù)器地址,其中 Math.random() 用于生成一個隨機(jī)數(shù),以避免緩存問題。 onConnected 、 onDisconnected 和 onError 是連接建立、斷開和出錯時的回調(diào)函數(shù),你可以根據(jù)實際需求來定義它們。 onMessageDefault 是當(dāng)接收到消息時的默認(rèn)處理函數(shù),在這里將接收

    2024年02月09日
    瀏覽(38)
  • Vue | Vue.js 全家桶 Pinia狀態(tài)管理

    Vue | Vue.js 全家桶 Pinia狀態(tài)管理

    ??? Vue?.js專欄:Node.js Vue.js 全家桶 Pinia狀態(tài)管理 ????? 個人簡介:一個不甘平庸的平凡人?? ? 個人主頁:CoderHing的個人主頁 ?? 格言: ?? 路漫漫其修遠(yuǎn)兮,吾將上下而求索?? ?? 你的一鍵三連是我更新的最大動力?? 目錄 一、Pinia和Vuex的對比 什么是Pinia呢? Pina和

    2024年01月16日
    瀏覽(119)
  • vue--router路由和前端狀態(tài) 管理

    vue--router路由和前端狀態(tài) 管理

    vue--router路由基本加載 可以分為四步 :具體流程如下 : 安裝 在命令行中 進(jìn)入到自己的項目目錄輸入一下命令 安裝依賴: npm install --save vue-router 在需要用到路由跳轉(zhuǎn)的模塊中引用(本文是在在入口文件 main.js 進(jìn)行設(shè)置) import router from ‘vue-router’ Vue.use(router) 配置路由文件,

    2024年02月02日
    瀏覽(15)
  • 10 使用Vue+axios+Vuex實現(xiàn)登錄后前端數(shù)據(jù)本地化存儲實戰(zhàn)

    10 使用Vue+axios+Vuex實現(xiàn)登錄后前端數(shù)據(jù)本地化存儲實戰(zhàn)

    這已經(jīng)是《 Vue + SpringBoot前后端分離項目實戰(zhàn) 》專欄的前端部分第8篇博客了, 服務(wù)端部分 由天哥(天哥主頁)負(fù)責(zé),目前專欄目錄如下: Vue + SpringBoot前后端分離項目實戰(zhàn) - 前端部分 1.?手把手帶你做一套畢業(yè)設(shè)計-征程開啟 2.?我應(yīng)該把畢業(yè)設(shè)計做到什么程度才能過關(guān)? 3

    2024年02月16日
    瀏覽(19)
  • Vue + Element UI 前端篇(八):管理應(yīng)用狀態(tài)

    Vue + Element UI 前端篇(八):管理應(yīng)用狀態(tài)

    1. 引入背景 像先前我們是有導(dǎo)航菜單欄收縮和展開功能的,但是因為組件封裝的原因,隱藏按鈕在頭部組件,而導(dǎo)航菜單在導(dǎo)航菜單組件,這樣就涉及到了組件收縮狀態(tài)的共享問題。收縮展開按鈕觸發(fā)收縮狀態(tài)的修改,導(dǎo)航菜單需要根據(jù)收縮狀態(tài)來設(shè)置導(dǎo)航欄的寬度。這樣就

    2024年02月09日
    瀏覽(44)
  • vue中vuex的五個屬性和基本用法,另加js-cookie的使用

    vue中vuex的五個屬性和基本用法,另加js-cookie的使用

    VueX 是一個專門為 Vue.js 應(yīng)用設(shè)計的狀態(tài)管理構(gòu)架,統(tǒng)一管理和維護(hù)各個vue組件的可變化狀態(tài)(你可以理解成 vue 組件里的某些 data )。 state, getters, mutations, actions, modules。 1. state: vuex的基本數(shù)據(jù),用來存儲變量 2. geeter: 從基本數(shù)據(jù)(state)派生的數(shù)據(jù),相當(dāng)于state的計算屬性 3.

    2024年02月14日
    瀏覽(42)
  • VueSupercharge 精通指南:構(gòu)建超級狀態(tài)管理 Vue.js 應(yīng)用

    VueSupercharge 精通指南:構(gòu)建超級狀態(tài)管理 Vue.js 應(yīng)用

    Vuex?是一個專為?Vue.js?應(yīng)用程序開發(fā)的狀態(tài)管理模式?+?庫。它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化。 這個狀態(tài)自管理應(yīng)用包含以下幾個部分: 狀態(tài),驅(qū)動應(yīng)用的數(shù)據(jù)源; 視圖,以聲明方式將狀態(tài)映射到視圖;

    2024年01月20日
    瀏覽(26)
  • 使用Vue+Vuex+CSS3完成管理端響應(yīng)式架構(gòu)模板實戰(zhàn)

    上節(jié)回顧 上一節(jié)我們通過引入 md5 ,對密碼進(jìn)行了不可逆加密;然后對 用戶名 和 密碼 進(jìn)行了數(shù)據(jù)整理,發(fā)送axios請求,同時引入了 Vuex前端本地化數(shù)據(jù)管理 ,將用戶名和token進(jìn)行存儲。還不明白上下文的同學(xué)可以回頭去專欄看一下:使用Vue+axios+Vuex實現(xiàn)登錄后前端數(shù)據(jù)本地化

    2023年04月15日
    瀏覽(17)
  • Vue項目保持用戶登錄狀態(tài)(localStorage + vuex 刷新頁面后狀態(tài)依然保持)

    Vue項目保持用戶登錄狀態(tài)(localStorage + vuex 刷新頁面后狀態(tài)依然保持)

    ????????在前端項目開發(fā)中,實現(xiàn)用戶的登陸注冊功能時常常會有一個問題,那就是我們設(shè)置的登錄狀態(tài),在瀏覽器頁面刷新后就消失了,這其實只是因為我們沒有保存用戶狀態(tài)。 這里小馬演示使用的是 localStorage ? + ? vuex 方法(其他諸如 sessionStorage、cookie 等用法相同,

    2023年04月08日
    瀏覽(22)
  • 11 使用Vue+Vuex+CSS3完成管理端響應(yīng)式架構(gòu)模板實戰(zhàn)

    上節(jié)回顧 上一節(jié)我們通過引入 md5 ,對密碼進(jìn)行了不可逆加密;然后對 用戶名 和 密碼 進(jìn)行了數(shù)據(jù)整理,發(fā)送axios請求,同時引入了 Vuex前端本地化數(shù)據(jù)管理 ,將用戶名和token進(jìn)行存儲。還不明白上下文的同學(xué)可以回頭去專欄看一下:使用Vue+axios+Vuex實現(xiàn)登錄后前端數(shù)據(jù)本地化

    2024年02月15日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包