VUE-X的actions解決異步,getters分類展示,mapState和mapGetters

1.actions解決異步:

store下index.js文件:

getters: {

? ? /* 計算大專學(xué)歷的數(shù)據(jù) */

? ? getDaZhuan: function (state) {

? ? ? return state.list.filter(r => r.xueli == '大專')

? ? },

? ? /* 計算本科學(xué)歷的數(shù)據(jù) */

? ? getBengKe: function (state) {

? ? ? return state.list.filter(r => r.xueli == '本科')

? ? },

? ? /* 說明也具有緩存功能 如果state中的數(shù)據(jù)得到了改變

? ? ? ? 那么getters中的屬性也會發(fā)生改變,如果state的值沒有發(fā)生任何變化,那么getters

? ? ? ? 中的屬性的值就不會發(fā)生改變*/

? ? getRandom:function(state){

? ? ? ?return state.num +'--'+ Math.random()

? ? }

? },

? /* 在mutations中修改state中的值(修改state中的值要想留下記錄必須用mutations修改) */

? mutations: {

? ? /* 在mutations里面寫異步就會造成數(shù)據(jù)混亂的問題 */

? ? /* mutations 的方法最好大寫,為了和actions方法做區(qū)分 */

? ? /* mutations 通過payload來獲取 */

? ? ADDNUM: function (state, payload) {

? ? ? console.log('ADDNUM', state);

? ? ? /* 模擬后臺獲取數(shù)組的異步場景 */

? ? ? /* setTimeout(()=>{

? ? ? ? state.num+=payload

? ? ? },500) */

? ? ? /* state.num++ */

? ? ? state.num += payload

? ? },

? ? DELNUM: function (state, payload) {

? ? ? console.log('DELDNUM', state);

? ? ? /* state.num-- */

? ? ? state.num -= payload

? ? },

? },

? /* actions是用來調(diào)后臺接口的并commit提交一個mutations */

? actions: {

? ? /* actions里面的方法小寫為了區(qū)分mutations里面的方法 */

? ? /* 異步請求要放 actions 里面去寫 不要放組件寫*/

? ? addajax: function ({

? ? ? commit

? ? }, data) {

? ? ? setTimeout(() => {

? ? ? ? /* 使用解構(gòu)出來的commit方法來提交一個mutations方法ADDNUM來修改state中的值 */

? ? ? ? commit('ADDNUM', data)

? ? ? }, 500)

? ? },

? ? delajax: function ({

? ? ? commit

? ? }, data) {

? ? ? setTimeout(() => {

? ? ? ? /* 使用解構(gòu)出來的commit方法來提交一個mutations方法ADDNUM來修改state中的值 */

? ? ? ? commit('DELNUM', data)

? ? ? }, 500)

? ? },

? },

? /* 可以使用modules把vuex分模塊 */

? modules: {}

App.vue:

<p>

? ? ? 選擇要加減的數(shù)量

? ? ? <!-- v-model.number可以把字符串類型轉(zhuǎn)成數(shù)字類型 -->

? ? ?<select v-model="shuzi">

? ? ? ?<!-- 使用v-bind也會解析成數(shù)字 -->

? ? ? <option :value="1">1</option>

? ? ? <option :value="2">2</option>

? ? ? <option :value="3">3</option>

? ? </select>

? ? </p>


? ? <button @click="add">增加</button> |

? ? <button @click="del">減少</button>


data(){

? ?return{

? ? ?shuzi:1,

? ? ?xueli:'大專',

? ? ?value:0,

? ? ?arr:this.$store.state.list

? ?}

? },

methods:{

? ? /* 通過vuex方法實現(xiàn)了不同組件之間的數(shù)據(jù)共享 */

? ? add(){

? ? ? /* 利用commit傳值給mutations */

? ? /* this.$store.commit('ADDNUM',this.shuzi) */

? ? /* 需要dispatch一個actions方法 */

? ? this.$store.dispatch('addajax',this.shuzi)

? ? },

? ? del(){

? ? /* this.$store.commit('DELNUM',this.shuzi) */

? ? this.$store.dispatch('delajax',this.shuzi)

? ? },

? ? getR(){

? ? ? console.log(this.$store.getters.getRandom);

? ? },

}

},

2.getters分類展示:

store下index.js文件:

export default new Vuex.Store({

? /* state是用來存儲組件中的數(shù)據(jù)的 */

? state: {

? ? msg: '我是組件共享的數(shù)據(jù)',

? ? num: 0,

? ? list: [{

? ? ? ? "title": "某xxxx去了學(xué)校1",

? ? ? ? "dec": "xxxxxxx學(xué)習(xí)了vue學(xué)習(xí)了java",

? ? ? ? "xueli": "大專"

? ? ? },

? ? ? {

? ? ? ? "title": "某xxxx去了學(xué)校2",

? ? ? ? "dec": "xxxxxxx學(xué)習(xí)了vue學(xué)習(xí)了javaScript",

? ? ? ? "xueli": "大專"

? ? ? },

? ? ? {

? ? ? ? "title": "某xxxx去了學(xué)校3",

? ? ? ? "dec": "xxxxxxx學(xué)習(xí)了vue學(xué)習(xí)了云計算",

? ? ? ? "xueli": "大專"

? ? ? },

? ? ? {

? ? ? ? "title": "某xxxx去了學(xué)校4",

? ? ? ? "dec": "xxxxxxx學(xué)習(xí)了vue學(xué)習(xí)了前端",

? ? ? ? "xueli": "本科"

? ? ? },

? ? ? {

? ? ? ? "title": "某xxxx去了學(xué)校5",

? ? ? ? "dec": "xxxxxxx學(xué)習(xí)了vue學(xué)習(xí)了后端",

? ? ? ? "xueli": "本科"

? ? ? },

? ? ? {

? ? ? ? "title": "某xxxx去了學(xué)校6",

? ? ? ? "dec": "xxxxxxx學(xué)習(xí)了vue學(xué)習(xí)了大數(shù)據(jù)",

? ? ? ? "xueli": "本科"

? ? ? }

? ? ]

? },

? /* getters計算組件中的數(shù)據(jù)的,可以對數(shù)據(jù)進(jìn)行二次加工類似于computer功能 */

? /* 類似于計算屬性 */

? getters: {

? ? /* 計算大專學(xué)歷的數(shù)據(jù) */

? ? getDaZhuan: function (state) {

? ? ? return state.list.filter(r => r.xueli == '大專')

? ? },

? ? /* 計算本科學(xué)歷的數(shù)據(jù) */

? ? getBengKe: function (state) {

? ? ? return state.list.filter(r => r.xueli == '本科')

? ? },

? ? /* 說明也具有緩存功能 如果state中的數(shù)據(jù)得到了改變

? ? ? ? 那么getters中的屬性也會發(fā)生改變,如果state的值沒有發(fā)生任何變化,那么getters

? ? ? ? 中的屬性的值就不會發(fā)生改變*/

? ? getRandom:function(state){

? ? ? ?return state.num +'--'+ Math.random()

? ? }

? },

App.vue:

<p>

? ? ? 選擇要展示的學(xué)歷

? ? ? ?<select v-model="value" @change="changefn">

? ? ? ? ?<option value="0">全部</option>

? ? ? <option value="1">大專</option>

? ? ? <option value="2">本科</option>

? ? </select>

? ?</p>

? ? <table border="2">

? ? ? <tr>

? ? ? ? <th>標(biāo)題</th>

? ? ? ? <th>描述</th>

? ? ? ? <th>學(xué)歷</th>

? ? ? </tr>


? ? ? <tr v-for="(v,i) in list" :key="i">

? ? ? ?<td>{{v.title}}</td>

? ? ? ?<td>{{v.dec}}</td>

? ? ? ?<td>{{v.xueli}}</td>

? ? ? </tr>

? ? </table>

第一種方法展示:

computed:{

? ?list:function(){

? ? ?/* value==0 展示全部 */

? ? ?if(this.value==0){

? ? ?return this.$store.state.list

? ? ?}else if(this.value==1){

? ? ? ?/* value 為1的通過getters的過濾展示大專數(shù)據(jù) */

? ? ? return this.$store.getters.getDaZhuan

? ? ?}else if(this.value==2){

? ? ? ?return this.$store.getters.getBengKe ?

? ? ?}else{

? ? ? ?/* 計算屬性無論如何都需要返回一個值 */

? ? ? ?return []

? ? ?}


? ?},

第二種方法展示:

methods:{

? ? changefn(){

? ? ? if(this.value==0){

? ? ? ? this.arr = this.$store.state.list

? ? ? }else if(this.value==1){

? ? ? ? /* value為1通過getters的過濾展示大專數(shù)據(jù) */

? ? ? ? this.arr = this.$store.getters.getDaZhuan

? ? ? }else if(this.value==2){

? ? ? ? this.arr = this.$store.getters.getBenke

? ? ? }

? ? }

?}

3.mapState和mapGetters:

import 導(dǎo)出vuex中的mapState方法

/* import {mapState} from 'vuex' */

/* import {mapState,mapGetters} from 'vuex' */

computed? 計算屬性里

computed:{

? /* 等同于 list:function (){return[...]} */

? ?/* ...mapState(['list']),

? ?...mapGetters(['getDaZhuan','getBengke']) */

? },

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容