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

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

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

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

前言

vuex的執(zhí)行流程

組件通過dispatch調(diào)用action,action通過commit來觸發(fā)mutation,mutation來負責修改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,//嚴格模式,防止直接修改state(性能很差,發(fā)布時改為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);
 }
 },
 //相當于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/>'
})

使用

映射關系

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來獲取,但是如果需要獲取多個值就會很麻煩。

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

當系統(tǒng)比較龐大時,store會變得非常臃腫。

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

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

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

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

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

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

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

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

3.創(chuàng)建一個中間變量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-是個方法。需要...延展符展開
  ...mapActions(['syncUserInfo']),
 }

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

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

2.計算屬性

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

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

this.$store.dispatch

created(){
  // 調(diào)用vuex-actions中的方法-剛進入app,就需要驗證登錄的時效性
  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ù)使用說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

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

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

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

    Vue中組件遞歸及使用問題

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

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

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

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

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

    Vue3+Vue-cli4項目中使用騰訊滑塊驗證碼的方法

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

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

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

    vue中view-model雙向綁定基礎原理解析

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

    Vue實現(xiàn)進度條變化效果

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

    vuex 動態(tài)注冊方法 registerModule的實現(xiàn)

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

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

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

最新評論

邢台市| 岫岩| 关岭| 宁德市| 桃源县| 肃宁县| 冷水江市| 乐陵市| 昆明市| 朔州市| 廉江市| 惠水县| 玛多县| 望都县| 黑河市| 临清市| 南安市| 安福县| 蒙山县| 岳阳县| 湛江市| 于都县| 屏南县| 新绛县| 长白| 康保县| 云安县| 无为县| 香河县| 定兴县| 湛江市| 元朗区| 阳西县| 抚宁县| 大丰市| 施甸县| 高邮市| 西林县| 乌鲁木齐县| 肇州县| 南漳县|