zoukankan      html  css  js  c++  java
  • 从引入到实例最详尽 vue.js引入vuex储存接口数据并调用的流程



    第一步当然还是安装了,这里只介绍npm的安装方法,别的请自行百度。

    npm install vuex --save
    第二步就是调用,我在src文件夹简历了个store.js的文件,方便管理。然后在main.js里面引入

    import store from "./store";
    new Vue({
    store,
    render: h => h(App)
    }).$mount("#app");
    至此,安装基本完成,下面介绍这个东西的用法。vuex的好处我也不多说了,简单来说就是数据共享嘛,反正谁用谁知道。不要以为你的项目小就可以不用这个,它可以让你在开发中省掉很多事儿。
    现在我的文件是这样的(项目框架是vue-cli3.0):

    接下来就开始在store里面写东西啦。其实这东西用法简单的一比,就是几个属性而已。最常用的就这四个:state,mutations,actions,getters.
    state就是存死数据的,当然下面也可以改它的数据.

    1.store

    在store.js里面:

    import Vue from "vue";
    import Vuex from "vuex";
    Vue.use(Vuex);
    export default new Vuex.Store({
    state: {
    box: 123
    }
    });
    然后在你的组件里面引入一下(我这里直接引用了这四个家伙,实际开发的时候你用到啥引用啥就好,不然eslint又该出红线了)

    import {
    mapGetters,
    mapState,
    mapMutations,
    mapActions
    } from "vuex";
    然后在计算属性里面写

    computed: {
    ...mapState(["box"])
    },
    接下来在template里面直接调用,这个数据是共享的,在每一个组件里面想用都可以直接这么引入调用(加个点击事件,下面要用下)

    <div class="page">
    {{box}}
    </div>
    <button @click="btn">按钮</button>
    哈哈,界面里面估计都已经显示了123了吧。就是这么简单。

    2.mutations

    接下来看mutations,这个属性主要是修改store存储的值的,就比如说刚才那个box,就可以用这个玩意儿修改。
    在store里面接着上面的写

    export default new Vuex.Store({
    state: {
    box: 123
    },
    mutations: {
    someMutation(state, count) {
    state.box += count;
    }
    }
    });
    这个里面有两个参数,state,count,state就是上面那个state,count就是你要传入的数据,当然,你不传东西也可以,只是个方法而已。我这随便写了个案例。
    接下来在你的组件里面的调用,这里调用是在methods里面写,毕竟人家是方法嘛,对吧!

    ...mapMutations(["someMutation"]),
    btn(){
    this.someMutation(22);
    }
    这里我传了个值为22,写在了点击事件里面,然后就是开始点击,相信你现在看到已经变成145了。

    3.actions
    actions里面也是两个参数, 例如在store.js里面这么写:

    actions: {
    getbox2(context,s) {
    return context.box;
    }
    }
    我们可以通过第一个参数context来获取state或者getter里面的值,context.state或者context.getters直接就可以获取第二个参数s,就是我们传的值。
    在组件里面我们直接这么写

    methods:{
    ...mapActions(["getbox2"]),
    ...mapMutations(["someMutation"])
    }
    然后直接调用

    mounted(){
    this.getbox2(1234).then((res)=>{
    console.log(res)
    })
    }
    这里打印出来的是根据刚才在store里面返回的值有关,

    getbox2(context,s) {
    return context.box;
    }
    这样返回的就是123,若是

    getbox2(context,s) {
    return s;
    }
    这么写返回的就是你传入的那个s,打印出1234.
    actions还可以直接调用mutations的方法。例如
    getbox2(context) {

    return context.commit('someMutation');
    }
    然后在组件中直接调用

    this.getbox2()
    这样就直接运行了someMutation这个方法。值得一提的是actions是异步的,就是你想怎么用,想在哪用都是可以的。简单来说,就是你想改变state的值,就用mutations,如果你想用方法,就用actions

    4.getters
    getters就更加简单啦,直接在store里面,例如:

    getters: {
    getbox(state) {
    return 1;
    }
    }
    然后在组件的计算属性里面这么写:

    computed: {
    ...mapGetters(["getbox"]),
    ...mapState(["box"])
    },
    然后在template里面直接拿来用,

    <div class="page">
    {{ getbox }}
    {{box}}
    <button @click="btn">按钮</button>
    </div>
    简单来说,这东西就是vuex里面的计算属性,跟computed一个尿性。里面的state就是上面那个state。最终代码是这样的:

    组件中:

    <template>
    <div class="page">
    {{ getbox }}
    {{box}}
    <button @click="btn">按钮</button>
    </div>
    </template>

    <script type="text/ecmascript-6">
    import {
    mapGetters,
    mapState,
    mapMutations,
    mapActions
    } from "vuex";
    export default {
    data() {
    return {
    count:0
    }
    },
    components: {
    },
    computed: {
    ...mapGetters(["getbox"]),
    ...mapState(["box"])
    },
    methods:{
    ...mapActions(["getbox2"]),
    ...mapMutations(["someMutation"]),
    btn(){
    this.someMutation(22);
    },
    },
    mounted() {
    // this.getbox2().then((res)=>{
    // console.log(res)
    // })
    this.getbox2()

    },
    }
    </script>

    <style scoped lang="stylus">
    </style>
    在store.js中:

    import Vue from "vue";
    import Vuex from "vuex";

    Vue.use(Vuex);

    export default new Vuex.Store({
    state: {
    box: 123
    },
    mutations: {
    someMutation(state, count) {
    // state.box += count;
    state.box++;
    }
    },
    actions: {
    getbox2(context) {
    return context.commit('someMutation');
    }
    },
    getters: {
    getbox(state) {
    return state.box;
    }
    }
    });
    main.js中:

    import Vue from "vue";
    import App from "./App.vue";
    import router from "./router";
    import store from "./store";

    Vue.config.productionTip = false;

    new Vue({
    router,
    store,
    render: h => h(App)
    }).$mount("#app");
    好了,大功告成,相信你们对这个所谓的状态管理工具有一定的了解了。有啥写的不太好的地方,请大家多多指教。



  • 相关阅读:
    使用 jfinal + beetl + bootstrap 实现商城展示及管理系统
    关于Node.js的__dirname,__filename,process.cwd(),./文件路径的一些坑
    canvas离屏、旋转效果实践——旋转的雪花
    走一步再走一步,揭开co的神秘面纱
    用javascript写一个emoji表情插件
    基于HTML5快速搭建TP-LINK电信拓扑设备面板
    百度地图获取规划路径信息
    devicePixelRatio 那些事儿
    怎样用JavaScript和HTML5 Canvas绘制图表
    首次写iPad布局感想(H5)
  • 原文地址:https://www.cnblogs.com/onesea/p/13203619.html
Copyright © 2011-2022 走看看