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

vuex存取值和映射函數(shù)使用說明

 更新時(shí)間:2020年07月24日 10:35:24   作者:程序員小潘  
這篇文章主要介紹了vuex存取值和映射函數(shù)使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。

前言

vuex的執(zhí)行流程

組件通過dispatch調(diào)用action,action通過commit來觸發(fā)mutation,mutation來負(fù)責(zé)修改state,state修改后去重新渲染受影響的dom。

安裝和引入

1、安裝

npm install vuex -S

2、引入

新建:store/index.js。

import vue from 'vue';
import Vuex from 'vuex';

vue.use(Vuex);

export default new Vuex.Store({
 strict:true,//嚴(yán)格模式,防止直接修改state(性能很差,發(fā)布時(shí)改為false)
 state:{
 a:1,
 b:2
 },
 mutations:{
 addA(state,val){
  state.a+=val;
 },
 addB(state,val){
  state.b+=val;
 }
 },
 actions:{
 addA({commit},val){
  //調(diào)用mutations中的addA()
  commit('addA', val);
 },
 addB({commit},val){
  //調(diào)用mutations中的addB()
  commit('addB', val);
 }
 },
 //相當(dāng)于computed
 getters:{
 getA(state){
  return state.a;
 },
 getB(state){
  return state.b;
 },
 count(state){
  return state.a + state.b;
 }
 },
 modules:{

 }
});

3、掛載

import store from './store';

new Vue({
 el: '#app',
 store,
 components: { App },
 template: '<App/>'
})

使用

映射關(guān)系

mapState > computed

mapGetters > computed

mapMutations > methods

mapActions > methods

State和mapState

state是vuex的核心,是統(tǒng)一存放數(shù)據(jù)的地方。

從store中獲取值。(不推薦)

<template>
 <div>
  a:{{$store.state.a}}
  <br>
  b:{{$store.state.b}}
 </div>
</template>

官方推薦通過computed來獲取,但是如果需要獲取多個(gè)值就會(huì)很麻煩。

mapState

<template>
 <div>
  a:{{a}}
  <br>
  b:{}
 </div>
</template>

<script>
 import {mapState} from 'vuex';
 export default {
  name: "MapState",
  computed:{
   //將store.state中的屬性映射到computed
   ...mapState(['a','b'])
  }
 }
</script>

getters和mapGetters

獲取getters中的值。

<div>
 a:{{$store.getters.getA}}
 <br>
 b:{{$store.getters.getB}}
 <br>
 a+b={{$store.getters.count}}
</div>

使用mapGetters映射。

<template>
 <div>
  a={{getA}}
  <br>
  b={{getB}}
  <br>
  a+b={{count}}
 </div>
</template>

<script>
 import {mapGetters} from 'vuex';
 export default {
  name: "MapGetters",
  computed:{
   //將store.getters映射到computed
   ...mapGetters(['getA','getB','count'])
  }
 }
</script>

mutations和mapMutations

通過$store.commit來觸發(fā)mutation。

不推薦直接調(diào)用mutation來修改。

<template>
 <div>
  a={{$store.state.a}}
  <br>
  b={{$store.state.b}}
  <br>
  a+b={{$store.getters.count}}
  <hr>
  <button @click="$store.commit('add',5)">a+5</button>
 </div>
</template>

使用mapMutations映射。

<template>
 <div>
  a={{$store.state.a}}
  <br>
  b={{$store.state.b}}
  <br>
  a+b={{$store.getters.count}}
  <hr>
  <button @click="addA(5)">a+5</button>
 </div>
</template>

<script>
 import {mapMutations} from 'vuex';
 export default {
  name: "MapMutations",
  methods:{
   //將store.mutations映射到methods
   ...mapMutations(['addA'])
  }
 }
</script>

actions和mapActions

官方推薦通過action去觸發(fā)mutation,雖然比較麻煩。

action支持異步,mutation只能同步。

通過$store.dispatch來觸發(fā)action。

<button @click="$store.dispatch('addA',5)">a+5</button>

使用mapActions映射。

<template>
 <div>
  a={{$store.state.a}}
  <br>
  b={{$store.state.b}}
  <br>
  a+b={{$store.getters.count}}
  <hr>
  <button @click="$store.dispatch('addA',5)">a+5</button>
 </div>
</template>

<script>
 import {mapActions} from 'vuex';
 export default {
  name: "MapActions",
  methods:{
   //將store.actions映射到methods
   ...mapMutations(['addA'])
  }
 }
</script>

Modules

當(dāng)系統(tǒng)比較龐大時(shí),store會(huì)變得非常臃腫。

為了方便store的模塊化管理,Vuex 允許我們將 store 分割成 modules。

每個(gè)模塊擁有自己的 state、mutation、action、getter、甚至是嵌套子模塊。

補(bǔ)充知識(shí):向vuex存儲(chǔ)數(shù)據(jù)和獲取數(shù)據(jù)-和直接調(diào)用actions.js中的異步方法

向vuex的變量存儲(chǔ)數(shù)據(jù)

1.在state.js中添加 userInfo: {},

2.actions.js中添加同步用戶信息-將參數(shù)userInfo傳遞給USER_INFO

創(chuàng)建一個(gè)方法-不用異步方法

syncUserInfo({commit}, userInfo){
  commit(USER_INFO, {userInfo});
},

3.創(chuàng)建一個(gè)中間變量mutation-types.js

export const USER_INFO = 'user_info';

4.在actions.js中引入變量-USER_INFO

 import {
  USER_INFO
 } from './mutation-types'

5.在mutations.js中引入變量

 import {
  USER_INFO
 } from './mutation-types'

將userInfo賦值給state

[USER_INFO](state, {userInfo}) {
 state.userInfo = userInfo;
 },

6.外界直接調(diào)用actions.js中的方法 syncUserInfo

 import {mapActions} from 'vuex'
 methods: {
  // 存到vuex-是個(gè)方法。需要...延展符展開
  ...mapActions(['syncUserInfo']),
 }

向vuex中獲取數(shù)據(jù)

1.引入 import {mapState} from 'vuex';

2.計(jì)算屬性

computed:{
 ...mapState(['userInfo'])
},

直接調(diào)用vuex-中 actions.js的異步方法--

this.$store.dispatch

created(){
  // 調(diào)用vuex-actions中的方法-剛進(jìn)入app,就需要驗(yàn)證登錄的時(shí)效性
  this.$store.dispatch('getUserInfo')
},

actions.js

// 7. 異步獲取用戶信息
async getUserInfo({commit}){
 const result = await getUserInfo(); // actions中調(diào)用getUserInfo方法---需要引入import
 console.log(result);
 if(result.success_code === 200){
   commit(USER_INFO, {userInfo: result.message});
 }
},

actions中調(diào)用getUserInfo方法---需要引入

import {
 getUserInfo,
} from '../api'
----------------------
api-index.js
// 2.9 獲取登錄的用戶信息
export const getUserInfo = () => ajax(BASE_URL + '/api/user_info');

以上這篇vuex存取值和映射函數(shù)使用說明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • element-ui之解決select無法回顯的問題

    element-ui之解決select無法回顯的問題

    這篇文章主要介紹了element-ui之解決select無法回顯的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue中組件遞歸及使用問題

    Vue中組件遞歸及使用問題

    這篇文章主要介紹了Vue中組件的遞歸和使用問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Vue?響應(yīng)式系統(tǒng)依賴收集過程原理解析

    Vue?響應(yīng)式系統(tǒng)依賴收集過程原理解析

    Vue 初始化時(shí)就會(huì)通過 Object.defineProperty 攔截屬性的 getter 和 setter ,為對(duì)象的每個(gè)值創(chuàng)建一個(gè) dep 并用 Dep.addSub() 來存儲(chǔ)該屬性值的 watcher 列表,這篇文章主要介紹了Vue?響應(yīng)式系統(tǒng)依賴收集過程分析,需要的朋友可以參考下
    2022-06-06
  • vue循環(huán)語句v-for中的元素綁定值

    vue循環(huán)語句v-for中的元素綁定值

    這篇文章主要介紹了vue循環(huán)語句v-for中的元素綁定值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Vue3+Vue-cli4項(xiàng)目中使用騰訊滑塊驗(yàn)證碼的方法

    Vue3+Vue-cli4項(xiàng)目中使用騰訊滑塊驗(yàn)證碼的方法

    這篇文章主要介紹了Vue3+Vue-cli4項(xiàng)目中使用騰訊滑塊驗(yàn)證碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • VSCode寫vue項(xiàng)目一鍵生成.vue模版,修改定義其他模板的方法

    VSCode寫vue項(xiàng)目一鍵生成.vue模版,修改定義其他模板的方法

    這篇文章主要介紹了VSCode寫vue項(xiàng)目一鍵生成.vue模版,修改定義其他模板的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • vue中view-model雙向綁定基礎(chǔ)原理解析

    vue中view-model雙向綁定基礎(chǔ)原理解析

    這篇文章主要介紹了vue中view-model雙向綁定基礎(chǔ)原理,文中給大家介紹了vue雙向綁定的原理總結(jié),本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Vue實(shí)現(xiàn)進(jìn)度條變化效果

    Vue實(shí)現(xiàn)進(jìn)度條變化效果

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)進(jìn)度條變化效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vuex 動(dòng)態(tài)注冊(cè)方法 registerModule的實(shí)現(xiàn)

    vuex 動(dòng)態(tài)注冊(cè)方法 registerModule的實(shí)現(xiàn)

    這篇文章主要介紹了vuex 動(dòng)態(tài)注冊(cè)方法 registerModule的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • vue單元格多列合并的實(shí)現(xiàn)

    vue單元格多列合并的實(shí)現(xiàn)

    這篇文章主要介紹了vue單元格多列合并的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

电白县| 大兴区| 民权县| 临夏市| 那曲县| 芮城县| 海林市| 临澧县| 靖安县| 岳池县| 民勤县| 于都县| 曲沃县| 大名县| 宝丰县| 兴海县| 奉化市| 桦甸市| 龙州县| 赫章县| 古浪县| 容城县| 彭阳县| 湘阴县| 拜泉县| 乾安县| 东丰县| 成都市| 武穴市| 上饶市| 枣强县| 伽师县| 长泰县| 彰化县| 平邑县| 抚顺县| 陆河县| 海门市| 邻水| 河北区| 商河县|