美文网首页
关于vuex

关于vuex

作者: 給我小鱼干 | 来源:发表于2018-08-08 14:49 被阅读0次

-主要是应用在vue.js中管理数据状态的一个库
-通过创建一个集中的数据存储,供程序中所有的组件访问--store可以理解为一个单一的数据源。
使用vue.js的场景:


image.png

一个简单的demo

结构:


image.png

在store.js中写入:

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export const store = new Vuex.Store({
    state: {
        products: [
            { name: 'jame1', age: 8 },
            { name: 'jame2', age: 88 },
            { name: 'jame3', age: 888 },
            { name: 'jame4', age: 8888 },
        ]
    }
})

在main.js中注入store:

import Vue from 'vue'
import App from './App.vue'
import { store } from './store/store'

new Vue({
    store,
    el: '#app',
    render: h => h(App)
})

在组件中写入:

<template>
  <div id="listOne">
    <h2>listOne</h2>
    <ul>
      <li v-for="(product,index) in products" :key="index">
        <span class="name">{{product.name}}</span>
        <span class="age">{{product.age}}</span>
      </li>
    </ul>
  </div>
</template>
<script>
export default{
  computed:{
    products(){
      return this.$store.state.products; 
    }
  }
}
</script>

app.js中引入组件并传值:

<!--  -->
<template>
  <div id="app">
    <ListOne></ListOne>
    <ListTwo></ListTwo>
  </div>
</template>
<script>
import ListOne from './components/ListOne'; 
import ListTwo from './components/ListTwo'; 
export default {
  data () {
    return {
    };
  },
  created () {
  },
  components: {
    ListOne,
    ListTwo
  },
  computed: {},
  methods: {}
}
</script>
<style scoped>
</style>

下面说一下getters用法

getters我个人的理解就是一个中间件 对数据进行处理的函数
store.js中这样写:

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export const store = new Vuex.Store({
    state: {
        products: [
            { name: 'jame1', age: 8 },
            { name: 'jame2', age: 88 },
            { name: 'jame3', age: 888 },
            { name: 'jame4', age: 8888 },
        ]
    },
    getters: {
        selePrice: (state) => {
            let selePrice = state.products.map(item => {
                return {
                    name: '__' + item.name,
                    age: item.age * 2
                }
            });
            return selePrice;
        }
    },
    mutations: {
        reducePrice: state => {
            state.products.forEach(item => {
                item.age -= 1;
            })
        }
    }
})

组建中使用:

<template>
  <div id="listOne">
    <h2>listOne</h2>
    <ul>
      <li v-for="(product,index) in selePrice" :key="index">
        <span class="name">{{product.name}}</span>
        <span class="price">{{product.age}}</span>
      </li>
      <button @click="reducePrice">商品降价</button>
    </ul>
  </div>
</template>
<script>
export default{
  computed:{
    products(){
      return this.$store.state.products; 
    },
    selePrice(){
      return this.$store.getters.selePrice;
    }
  },
  methods:{
    reducePrice(){
      this.$store.commit('reducePrice');
    }
  }
}
</script>

关于mutation

  • mutation可以实现异步加载

action commit context dispatch payload

  • 使用action可以实现异步加载数据同时执行,方便调试;而且可以传参:
    组件中代码:
<template>
  <div id="listOne">
    <h2>listOne</h2>
    <ul>
      <li v-for="(product,index) in selePrice" :key="index">
        <span class="name">{{product.name}}</span>
        <span class="age">{{product.age}}</span>
      </li>
      <button @click="reducePrice(4)">商品降价</button>
    </ul>
  </div>
</template>
<script>
export default{
  computed:{
    products(){
      return this.$store.state.products; 
    },
    selePrice(){
      return this.$store.getters.selePrice;
    }
  },
  methods:{
    reducePrice(amount){
      // this.$store.commit('reducePrice');
      this.$store.dispatch('reducePrice',amount);

}
  }
}
</script>

store.js中代码:

import Vue from 'vue';
import Vuex from 'vuex';
import { setTimeout } from 'timers';
Vue.use(Vuex);
export const store = new Vuex.Store({
    state: {
        products: [
            { name: 'jame1', age: 8 },
            { name: 'jame2', age: 88 },
            { name: 'jame3', age: 888 },
            { name: 'jame4', age: 8888 },
        ]
    },
    getters: {
        selePrice: (state) => {
            let selePrice = state.products.map(item => {
                return {
                    name: '__' + item.name,
                    age: item.age * 2
                }
            });
            return selePrice;
        }
    },
    mutations: {
        reducePrice: (state, payload) => {
            state.products.forEach(item => {
                item.age -= payload;
            })
        }
    },
    actions: {
        reducePrice: (context, payload) => {
            setTimeout(function() {
                context.commit('reducePrice', payload);
            }, 2000)
        }
    }
})

相关文章

  • 4.Vuex

    vuex官网 现在将 vuex 整合到我们的 vue-complex 应用中 有关于vuex的详细介绍 ,可以看看...

  • 展开语法

    关于vuex ...mapActions的问题 展开语法

  • 关于vuex

    -主要是应用在vue.js中管理数据状态的一个库-通过创建一个集中的数据存储,供程序中所有的组件访问--store...

  • 关于vuex

    1、vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 什么是“状态管理模式”? ...

  • 关于VUEX

    简单的说就是存放一些项目里常用值的地方。如导航菜单,人员信息,地区信息等。 该状态值为响应式的,即数值发生变化时所...

  • vuex小白入门

    首先:Vuex是什么? 有关于Vuex,官网是这样定义的:Vuex 是一个专为 Vue.js 应用程序开发的状态管...

  • vuex小白入门

    首先:Vuex是什么? 有关于Vuex,官网是这样定义的:Vuex 是一个专为 Vue.js 应用程序开发的状态管...

  • vuex核心原理

    首先:Vuex是什么? 有关于Vuex,官网是这样定义的:Vuex 是一个专为 Vue.js 应用程序开发的状态管...

  • Vuex在Vue工程的正确使用

    关于vuex,我们听到最多的是vuex是一个状态管理容器,可以解决组件之间通信的痛点。但vuex真的只是这样吗? ...

  • 33、vuex初探(一)

    前言:前面已经为了这章做了一点铺垫了,关于vuex也有很多读者私信我关于这方面的问题,其实vuex也很简单,今天我...

网友评论

      本文标题:关于vuex

      本文链接:https://www.haomeiwen.com/subject/cqotbftx.html