Vuex的创建和简单使用

Vuex

1.简介

1.1简介

1.框框里面才是Vuex

  • state:状态数据
  • action:处理异步
  • mutations:处理同步,视图可以同步进行渲染

1.2项目创建

1.vue create 名称

2.运行后

3.下载vuex。采用的是基于vue2的版本。

npm install vuex@3 --save

4.vue项目采用的是npm run serve 的运行的方式

1.3配置方式

1.src下创建index.js用于配置store

import Vuex from 'vuex'
import Vue from 'vue'
Vue.use(Vuex)

// 创建Vuex对象
const store = new Vuex.Store({
    //简单数据: 保存的全局状态变量
    state: {
        count: 1,
        app: "Vuex的学习"
    },
    // 改变数据
    mutations: {

    }
// 导出vuex
export default store
// 如果想使用的话必须去main.js中进行引用

2.main.js设置

import Vue from 'vue'
import App from './App.vue'
import store from './store/index'

Vue.config.productionTip = false

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

1.4获取数据的方式

1.$store.state.名称 获取的是全部的状态变量

2.采用导入的方式

//mapState讲store中的state映射到计算属性
import { mapState } from 'vuex';

需要在计算属性中进行获取store中的数据

  • 一种是()中直接写[]
  • 可以起别名采用{}的形式

 // 计算属性
  computed: {
    // 写法1
    ...mapState(
      ['count', 'app']
    ),
    // 写法2
    ...mapState({
      c: 'count', //相当于给count起了一个别名
      a: "app"
    }),
  }

3.界面展示

 <!-- 第一种方式 -->
    <div>
      获取store的第一种方式:{{ $store.state.count }}
    </div>

<div>
      获取store的第二种方式:
      {{ app }}
      {{ count }}
      <br>
      {{ c }}

      {{ a }}
    </div>

4.效果图

2.进阶

直接上代码,简单点用即可

1.store/index.js中导入了一个product的store自定义模块

import Vuex from 'vuex'
import Vue from 'vue'
import product from './product'
Vue.use(Vuex)

// 创建Vuex对象
const store = new Vuex.Store({
    //简单数据: 保存的全局状态变量
    state: {
        count: 1,
        app: "Vuex的学习"
    },
    // 改变数据
    mutations: {

    }
    ,

    // 复杂数据:当保存的是复杂的数据的时候
    // 一个单独的模块,每一个模块中的action,mutation和state都需要全部重新写
    modules: {
        //  采用模块引入的方式
        product,
    }
})
// 导出vuex
export default store
// 如果想使用的话必须去main.js中进行引用

2.子模块数据

export default
    // product是自定义的命名空间名称
    {
        namespaced: true,
        //全局数据
        state: {
            list: [1, 2, 3, 4, 5]
        },

        //同步: 改变数据
        mutations: {
            addList(state, payload) { //state是当前模块的数据(表示调用的时候传入的参数),payload是参数
                state.list.push(payload)
            }
        },
        // 异步:改变数据,不建议
        actions: {
            addList2(context, payload) { //state是当前模块的数据(表示调用的时候传入的参数),payload是参数
                // context.state.list.push(payload)  //保存的信息不会被记录下来
                context.commit('addList', payload) //可以被追踪到

            }
        }

    }

3.界面引用

<template>
  <div>
    <!-- 第一种方式 -->
    <div>
      获取store的第一种方式:{{ $store.state.count }}

    </div>

    <div>
      获取store的第二种方式:
      {{ app }}
      {{ count }}
      <br>
      {{ c }}

      {{ a }}
    </div>

    <!-- 获取不同模块中的数据 -->
    <div>
      获取不同模块中的数据{{ list }}
    </div>

    <!--同步 改变状态变量中的数据 -->
    <div>
      <input type="text" @keyup.enter="addClick" placeholder="回车确认信息" v-model="value">
    </div>

    <!-- 异步 改变状态变量中的数据 -->
    <div>
      <input type="text" @keyup.enter="addClick2" placeholder="回车确认信息" v-model="value2">
    </div>

    <!-- 异步 改变状态变量中的数据 -->
    <div>
      <input type="text" @keyup.enter="addClick3" placeholder="回车确认信息" v-model="value3">
    </div>
  </div>
</template>

<script>
//mapStatestore中的state映射到计算属性
import { mapState } from 'vuex';
// mapMutationsstore中的方法映射到methods
import { mapMutations } from 'vuex';
// mapActionsvuex中的actions映射到methods
import { mapActions } from 'vuex';
export default {
  name: 'helloWorld',
  // 数据
  data() {
    return {
      value: "",
      value2: "",
      value3: ''
    }
  },
  // 方法
  methods: {
    ...mapMutations(
      'product',//声明的命名空间
      ['addList'] //命名空间store中的方法
    ),
    ...mapActions(
      'product',//声明的命名空间
      ['addList2'] //命名空间store中的方法
    ),


    //同步:改变数据
    addClick() {
      // console.log(this.value); //打印测试信息
      this.addList(this.value) //直接调用mutation中的方法

    },
    //异步:改变数据
    addClick2() {
      this.addList2(this.value2)
    },

    //直接写
    addClick3() {
      //采用/的方式指定命名空间
      this.$store.commit('product/addList', this.value3)
    }
  },
  // 计算属性
  computed: {
    // 写法1
    ...mapState(
      ['count', 'app']
    ),
    // 写法2
    ...mapState({
      c: 'count', //相当于给count起了一个别名
      a: "app"
    }),

    // 导入别的模块中的数据
    ...mapState(
      'product', //命名空间名称
      ['list'] //state状态变量中的数据
    )
  }
}
</script>

<style></style>

4.效果图

3.注意点

state中保存的是全局的数据

改变state中的数据推荐使用的是mapMutations,改变的数据会被记录而且界面会时时的刷新和显示

mapActions采用的是异步的方式,不会留下记录的

而且在定义的时候改变数据的方式mutations是state的方式而actions的是context的方式

1.注意点

  • 导入

//mapState讲store中的state映射到计算属性
import { mapState } from 'vuex';
// mapMutations将store中的方法映射到methods
import { mapMutations } from 'vuex';
// mapActions把vuex中的actions映射到methods
import { mapActions } from 'vuex';

  • 获取

  // 计算属性
  computed: {
    // 写法1
    ...mapState(
      ['count', 'app']
    ),
    // 写法2
    ...mapState({
      c: 'count', //相当于给count起了一个别名
      a: "app"
    }),

    // 导入别的模块中的数据
    ...mapState(
      'product', //命名空间名称
      ['list'] //state状态变量中的数据
    )
  }
  
  // 方法
  methods: {
    ...mapMutations(
      'product',//声明的命名空间
      ['addList'] //命名空间store中的方法
    ),
    ...mapActions(
      'product',//声明的命名空间
      ['addList2'] //命名空间store中的方法
    ),
    ........
}
  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

简单点了

谢谢大佬

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

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

打赏作者

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

抵扣说明:

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

余额充值