(四)vue vuex——状态管理

Vuex的作用

解决多组件之间同一状态的数据共享;

解决数据持久化问题。

 

安装

cnpm install vuex --save

 

定义

// src下新建vuex目录,再在vuex目录下,新建store.js

// store.js:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

// 1、存储数据,主要用于数据共享和持久化的存储
var state = {
    count: 1,
    list: []
}

// 2、修改state数据的地方
var mutations = {
    incCount() {
        ++state.count;
    }
}

// 3、当state改变的时候,通过getters中的方法返回重新计算后的state的值,实际上并没有什么用处
var getters = {
    computedCount: (state) => {
        return state * 2
    }
}

// 4、调用mutations的地方,起到间接修改state的作用,可以进行异步请求的地方,跟getters一样,并没有什么作用
var actions = {
    incMutationsCount(context) {
        context.commit('incCount');
    }
}

var store = new Vuex({
    state,
    mutations,
    getters,
    actions
})

export default store

 

使用

// Home.vue:

<template>

    <div id="home">
        
    {{msg}}--{{this.$store.state.count}}---{{this.$store.getters.computedCount}}

    <br>

    <button @click="incCount()">增加</button>

    <br>

    <ul>
        <li v-for="(item, key) in list" :key="key">
            {{item}}
        </li>
    </ul>

    </div>

</template>

<script>

    import store from '../vuex/store.js'

    export default {
        name: 'app',
        data () {
            return {
                msg: '我是首页',
                list: []
            }
        },
        store,
        method: {
            incCount() {
                this.$store.commit('incCount')
            },
            requestData() {
                // 这里假设请求的api地址返回值中,data是一个数组
                let api = "";
                // 这里用的是vue-resource请求数据
                this.$http.get(api).then(response => {
                    
                    console.log(response)
                    this.list = response.data

                    this.$store.state.list = response.data

                }, err => {    
                    console.log(err)
                })
            }
        },
        mounted() {
            var stateList = this.$store.state.list
            if (stateList.length > 0) {
                this.list = stateList 
            } else {
                this.requestData()
            }
        }
    }

</script>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rising_chain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值