zoukankan      html  css  js  c++  java
  • 【前端】Vue2全家桶案例《看漫画》之三、引入vuex

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_3.html

    项目github地址:https://github.com/shamoyuu/vue-vux-iconan

    这一章我们简单地介绍一下vuex,然后引入它做一个简单的功能,后面用到我们再说。

    首先,vuex是什么?引用一下官方文档:

    “Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。”

    好抽象有木有?我第一次看见这句话的时候完全不知道在说什么,可能是我笨o(╥﹏╥)o。

    后来懂了才发现其实很简单,我举几个例子解释一下。

    1:小张在做个人中心页面,在登录前显示默认的头像和昵称,要求登录后显示用户的头像和昵称。但是登录页与个人中心页不是父子关系,而且有很多渠道可以打开登录页。

    2:小李在做悬浮购物车,要求有商品加入后就更新悬浮购物车上显示的数量。但是商品加车可以在很多页面操作,比如列表页,搜索页,详情页,推荐页等等。

    3:小王在做设置页,要求在用户绑定/修改手机号后,其他页面同步显示最新的手机号。修改手机号只有一处,但是需要显示手机号的地方却很多。

    vuex就是用来解决这样的问题的。虽然不用vuex也可以通过一些其他的方法实现,但是在项目变大后,就越来越难维护了。

    简介就到这里,下面我们来实际使用一下。

    首先引入vuex

    npm install --save-dev vuex

    然后新建一个/tool/store/store.js文件,用来保存和获取我们上面说到的“头像昵称”、“购物车商品”、“手机号”

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex);
    
    const state = {
        count: 1,
        author: "静茹♂鱼"
    };
    
    const mutations = {
        add(state){
            state.count += 1;
        },
        reduce(state){
            state.count -= 1;
        }
    };
    
    const getters = {
        author (state) {
            return "❤❤❤" + state.author + "❤❤❤";
        }
    };
    
    export default new Vuex.Store({
        state,
        mutations,
        getters
    });

    然后我们新建一个测试文件Test.vue,就简简单单地来测试一下vuex这几个简单的方法。

    <template>
        <div>
            <h1>{{count}}</h1>
            <hr>
            <button @click="$store.commit('add')">加</button>
            <hr>
            <button @click="$store.commit('reduce')">减</button>
            <hr>
            <button @click="foo">查看</button>
            <hr> {{author}}
        </div>
    </template>
    
    <script>
    import { mapState, mapGetters } from "vuex";
    
    export default {
        data() {
            return {};
        },
        methods: {
            foo: function() {
                console.info(this.$store.state.count);
            }
        },
        mounted: function() {},
        computed: {
            ...mapState(["count"]),
            ...mapGetters(["author"])
        }
    };
    </script>
    
    <style scoped>
    
    </style>

    点击加减就会操作store里的count数,点击查看就能从js里获取到store的count。而author(或许应该称为getAuthor)就能通过getter的方式获取到store.author。

  • 相关阅读:
    Django基础之cookie
    Django基础之redirect()
    Django基础之render()
    Django基础之JsonResponse对象
    Django基础之response对象
    scrapy框架自定制命令
    数据分析案例-拉勾网招聘信息
    爬虫之单线程多任务异步抓取
    数据分析之matplotlib使用
    数据分析之numpy使用
  • 原文地址:https://www.cnblogs.com/shamoyuu/p/vue_vux_app_3.html
Copyright © 2011-2022 走看看