首頁 > web前端 > Vue.js > 主體

vuex在vue3的用法是什麼

WBOY
發布: 2022-02-25 14:57:05
原創
9875 人瀏覽過

在vue3中,vuex用於儲存和管理所有元件的狀態,是專為「vue.js」應用程式開發的狀態管理模式;可以利用mutations可以改變vuex中的數據,對於非同步的情況,可用actions提交mutations中的方法改變vuex中的資料。

vuex在vue3的用法是什麼

本文操作環境:windows10系統、Vue3版,DELL G3電腦。

vuex在vue3的用法是什麼

Vuex 是專為 Vue.js 應用程式開發的狀態管理模式 函式庫。它採用集中式儲存管理應用的所有元件的狀態,並以相應的規則保證狀態以一種可預測的方式變更。

vuex在中大型專案的應用十分廣泛,通常會把全域都用到的資料放在vuex中,方便其他頁面使用,在專案中,vuex中存放的資料大部分與user_id ,權限等資訊相關,那麼在vue3該怎麼使用vuex呢?帶著這個問題,在這篇文章中,咱們一起分析下

        其實vue3中使用vuex和vue2使用vuex大體相同,都是透過state存放數據,透過mutations去改變vuex中的數據,對於非同步的情況,透過actions提交mutations中的方法進而改變vuex中的數據,帶著這個思路咱們一起使用下vue3中的vuex

        在開始寫程式碼之前,先來看我的目錄結構:在store檔案下,將vuex分為如下幾個ts檔

在index.ts中,將這幾個模組暴露出來的方法賦值給對應的模組

 1、如何使用vuex中存放的資料

        state和vue2一樣,都是存放資料的地方,並在寫法上也一模一樣,這裡我定義了一個count屬性,初始化為0

const state = {
  count: 0,
}
export { state }
登入後複製

這時我們在vue3中的使用方法如下:首先從vuex引入useStore函數,他的回傳值就是一個vuex實例

<template>
  <h1>vuex中的数据{{ store.state.count }}</h1>
</template>
<script lang="ts">
import { defineComponent } from "vue"
import { useStore } from "vuex"
export default defineComponent({
  name: "index",
  setup() {
    const store = useStore()
    return { store }
  },
})
</script>
登入後複製

在控制台中,印出這個store可以看到store上的一些屬性,很明顯他就是一個vuex的實例,它有getter,dispatch,state等屬性

## 2. 如何改變vuex中的屬性

        vue3和vue2一樣,都是透過提交mutations中的方法,進行對vuex中資料的改變,那具體該如何使用呢?首先來看看mutations中的寫法

const mutations = {
  addCount(state, payload) {
    state.count += payload
  },
}
export { mutations }
登入後複製
        這裡,並定義了一個addCount方法,這個方法接受兩個參數,第一個參數是要改變的state物件

(當然你呼叫這個放法的傳參中也可以寫state.count,然後再mutations中直接state = payload就可以了),第二個參數是要改變的數據,例如進行1 操作

<template>
  <h1>vuex中的数据{{ store.state.count }}</h1>
  <button @click="changeStoreCount">改变vuex数据</button>
</template>
<script lang="ts">
import { defineComponent } from "vue"
import { useStore } from "vuex"
export default defineComponent({
  name: "index",
  setup() {
    const store = useStore()
    console.log(store)
    const changeStoreCount = () => {
      // 在这里提交了mutations中的addCount方法
      store.commit("addCount", 1)
    }
    return { store, changeStoreCount }
  },
})
</script>
<style scoped></style>
登入後複製
3、如何非同步改變vuex的資料

        在vue2中actions透過dispach -> mutations中的方法來實現的,在vue3中也是如此,但是需要注意的是,vue3中actions的第一個參數是固定的,是目前vuex的實例,是不需要你進行傳遞的,第二個參數是將要進行操作的數據,在此,筆者使用2操作

const actions = {
  asyncAddStoreCount(store, payload) { // 第一个参数是vuex固定的参数,不需要手动去传递
    store.commit("addCount", payload)
  },
}
export { actions }
登入後複製
<template>
  <h1>vuex中的数据{{ store.state.count }}</h1>
  <button @click="changeStoreCount">改变vuex数据</button>
  <button @click="asyncChangeStoreCount">异步改变vuex数据</button>
</template>
<script lang="ts">
import { defineComponent } from "vue"
import { useStore } from "vuex"
export default defineComponent({
  name: "index",
  setup() {
    const store = useStore()
    console.log(store)
    const changeStoreCount = () => {
      store.commit("addCount", 1)
    }
    const asyncChangeStoreCount = () => {
      setTimeout(() => {
   // asyncAddStoreCount是mutations中的方法,2是传递过去的数据
   // 异步改变vuex用dispatch方法,这里用setTimeout模拟异步操作
        store.dispatch("asyncAddStoreCount", 2)
      }, 1000)
    }
    return { store, changeStoreCount, asyncChangeStoreCount }
  },
})
</script>
<style scoped></style>
登入後複製

效果圖:

1、初始:

 

#2、點選【改變vuex資料】按鈕:

 

3、 點選【非同步改變vuex資料】(在一秒之後發生變化)

【相關推薦:《

vue.js教學》】

以上是vuex在vue3的用法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
vue
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板