最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3中vuex的基本使用方法實例

 更新時間:2022年04月08日 10:17:34   作者:歡璽Yee  
Vuex是一個專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式,它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化,下面這篇文章主要給大家介紹了關(guān)于Vue3中vuex的基本使用方法,需要的朋友可以參考下

一、基本結(jié)構(gòu)

src/store/index.js中,代碼如下

// vue3中創(chuàng)建store實例對象的方法createStore()按需引入
import { createStore } from 'vuex'
export default createStore({
  state: {
  },
  mutations: {
  },
  actions: {
  },
  getters: {
  },
  modules: {
  }
})

二、基本使用

src/store/index.js

import { createStore } from 'vuex'
export default createStore({
  state: {
    info: 'hello'
  },
  mutations: {
    // 定義mutations,用于修改狀態(tài)(同步)
    updateInfo (state, payload) {
      state.info = payload
    }
  },
  actions: {
    // 定義actions,用于修改狀態(tài)(異步)
    // 2秒后更新狀態(tài)
    updateInfo (context, payload) {
      setTimeout(() => {
        context.commit('updateInfo', payload)
      }, 2000)
    }
  },
  getters: {
    // 定義一個getters
    formatInfo (state) {
      return state.info + ' Tom'
    }
  },
  modules: {
  }
})

src/views/Test.vue測試組件中對store中數(shù)據(jù)的操作與使用

<template>
  <div>測試組件</div>
  <hr>
  <!-- 頁面中直接使用渲染時與vue2中的使用方法相同 -->
  <div>獲取Store中的state、getters: {{$store.getters.formatInfo}}</div>
  <button @click='handleClick'>點擊</button>
</template>

<script>
// 按需引入useStore()方法
import { useStore } from 'vuex'

export default {
  name: 'Test',
  setup () {
    // this.$store.state.info
    // Vue3中store類似于Vue2中this.$store
    // useStore()方法創(chuàng)建store對象,相當于src/store/index.js中的store實例對象
    const store = useStore()
    console.log(store.state.info) // hello
    // 修改info的值
    const handleClick = () => {
      // 觸發(fā)mutations,用于同步修改state的信息
      // store.commit('updateInfo', 'nihao')
      // 觸發(fā)actions,用于異步修改state的信息
      store.dispatch('updateInfo', 'hi')
    }
    return { handleClick }
  }
}
</script>

點擊按鈕前

示例圖

點擊按鈕后

示例圖

三、將store中的數(shù)據(jù)模塊化后的使用

1.模塊化

基于原index.js代碼進行改造拆分,假設(shè)有兩個模塊global和user,新建src/store/modules/global.js 、src/store/modules/user.js文件

拆分后代碼如下(src/store/modules/global.js)

// 全局store,存放全局使用共享的數(shù)據(jù)
export default { // 注意:全局模塊中不需要開啟命名空間
  state: {
  },
  mutations: {
  },
  actions: {
  },
  getters: {
  }
}

拆分后代碼如下(src/store/modules/user.js)

// 用戶信息模塊(局部模塊)
export default {
  namespaced: true, // 開啟命名空間
  state () {
    return {
      // 用戶信息對象 
      profile: {
        id: '',
        avatar: '',
        nickname: 'yee',
        account: '',
        mobile: '',
        token: ''
      }
    }
  },
  mutations: {
    // 定義mutations,用于同步修改狀態(tài)
    updateNickname (state, payload) {
      state.profile.nickname = payload
    }
  },
  actions: {
    // 定義actions,用于異步修改狀態(tài)
    // 2秒后更新狀態(tài)
    updateNickname (context, payload) {
      setTimeout(() => {
        context.commit('updateNickname', payload)
      }, 2000)
    }
  },
  getters: {
    // 定義一個getters
    formatNickname (state) {
      return 'Hi ' + state.profile.nickname
    }
  }
}

拆分后代碼如下(src/store/index.js)

import { createStore } from 'vuex'
// 全局模塊
import global from './modules/global'
// 局部模塊
import user from './modules/user'

export default createStore({
  // 全局模塊
  ...global,
  // 局部模塊
  modules: {
    user
  }
})

2.使用

src/views/Test.vue測試組件中對模塊化后的store中數(shù)據(jù)的操作與使用

<template>
  <div>測試組件</div>
  <hr>
  <div>獲取Store中user模塊的getters: {{$store.getters['user/formatNickname']}}</div>
  <button @click='handleClick'>點擊</button>
</template>

<script>
import { useStore } from 'vuex'
export default {
  name: 'Test',
  setup () {
    // this.$store.state.info
    // Vue3中store類似于Vue2中this.$store
    const store = useStore()
    console.log(store.state.user.profile.nickname)
    // 修改nickname的值
    const handleClick = () => {
      // 觸發(fā)mutations,用于同步修改user模塊state的信息
      // store.commit('updateNickname', 'Jackson')
      store.dispatch('user/updateNickname', 'Yee')
    }
    return { handleClick }
  }
}
</script>

點擊按鈕前

點擊按鈕后

補充:如何改變vuex中的屬性

vue3和vue2一樣,都是通過提交mutations中的方法,進行對vuex中數(shù)據(jù)的改變,那具體該如何使用呢?首先看一下mutations中的寫法

const mutations = {
  addCount(state, payload) {
    state.count += payload
  },
}
export { mutations }

這里,定義了一個addCount方法,這個方法接受兩個參數(shù),第一個參數(shù)是要改變的state對象(當然你調(diào)用這個放法的傳參中也可以寫state.count,然后再mutations中直接state += payload就可以了),第二個參數(shù)是要改變的數(shù)據(jù),比如進行 +1 操作

<template>
  <h1>vuex中的數(shù)據(jù){{ store.state.count }}</h1>
  <button @click="changeStoreCount">改變vuex數(shù)據(jù)</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>

總結(jié) 

到此這篇關(guān)于Vue3中vuex的基本使用方法的文章就介紹到這了,更多相關(guān)Vue3 vuex基本使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在antd中setFieldsValue和defaultVal的用法

    在antd中setFieldsValue和defaultVal的用法

    這篇文章主要介紹了在antd中setFieldsValue和defaultVal的用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 如何通過點擊按鈕切換顯示不同echarts圖表

    如何通過點擊按鈕切換顯示不同echarts圖表

    這篇文章主要介紹了如何通過點擊按鈕切換顯示不同echarts圖表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue.js加載新的內(nèi)容(實例代碼)

    vue.js加載新的內(nèi)容(實例代碼)

    vue是一種輕巧便捷的框架,那么如何進行對于數(shù)據(jù)加載的刷新呢?以下就是我對于vue.js數(shù)據(jù)加載的一點想法
    2017-06-06
  • vue+element tabs選項卡分頁效果

    vue+element tabs選項卡分頁效果

    這篇文章主要為大家詳細介紹了vue+element tabs選項卡分頁效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • vue+swiper實現(xiàn)時間軸效果

    vue+swiper實現(xiàn)時間軸效果

    這篇文章主要為大家詳細介紹了vue+swiper實現(xiàn)時間軸效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 基于vue.js實現(xiàn)分頁查詢功能

    基于vue.js實現(xiàn)分頁查詢功能

    這篇文章主要為大家詳細介紹了基于vue.js實現(xiàn)分頁查詢功能,vue.js實現(xiàn)數(shù)據(jù)庫分頁,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • vue基于mint-ui的城市選擇3級聯(lián)動的示例

    vue基于mint-ui的城市選擇3級聯(lián)動的示例

    本篇文章主要介紹了vue基于mint-ui的城市選擇3級聯(lián)動的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • vue element ui使用選擇器實現(xiàn)地區(qū)選擇兩種方法

    vue element ui使用選擇器實現(xiàn)地區(qū)選擇兩種方法

    這篇文章主要給大家介紹了關(guān)于vue element ui使用選擇器實現(xiàn)地區(qū)選擇的兩種方法,Element UI是一套基于Vue.js開發(fā)的UI組件庫,其中包含了地區(qū)選擇器(Cascader)組件,需要的朋友可以參考下
    2023-09-09
  • 詳解Vite的新體驗

    詳解Vite的新體驗

    這篇文章主要介紹了詳解Vite的新體驗,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-02-02
  • Vue獲取DOM元素樣式和樣式更改示例

    Vue獲取DOM元素樣式和樣式更改示例

    本篇文章主要介紹了Vue獲取DOM元素樣式和樣式更改示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論

自治县| 南涧| 三都| 嘉定区| 安义县| 犍为县| 广南县| 武定县| 上林县| 上思县| 鄢陵县| 汪清县| 夏河县| 梧州市| 南通市| 交城县| 西安市| 兰考县| 左权县| 班戈县| 莱芜市| 秀山| 江陵县| 句容市| 和政县| 胶南市| 巨野县| 读书| 南木林县| 杭锦后旗| 棋牌| 得荣县| 凤凰县| 中西区| 禹城市| 轮台县| 射阳县| 衡东县| 安西县| 扎赉特旗| 蓬溪县|