Vuex的创建和简单使用

news2024/11/13 13:47:56

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中的方法
    ),
    ........
}
  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/359787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Frequency Domain Model Augmentation for Adversarial Attack

原文&#xff1a;[2207.05382] Frequency Domain Model Augmentation for Adversarial Attack (arxiv.org)代码&#xff1a;https://github.com/yuyang-long/SSA.黑盒攻击替代模型与受攻击模型之间的差距通常较大&#xff0c;表现为攻击性能脆弱。基于同时攻击不同模型可以提高…

C++8:模拟实现list

目录 最基础的链表结构以及迭代器实现 链表节点结构 构造函数 push_back list的迭代器 增删查改功能实现 insert erase pop_front pop_back push_front clear 默认成员函数 析构函数 拷贝构造函数 赋值操作符重载 list的完善 const迭代器 赋值操作符重…

使用BP神经网络诊断恶性乳腺癌(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 1.1.算法简介 BP&#xff08;Back Propagation&#xff09;网络是1986年由Rumelhart和McCelland为首的科学家小组提出&#xf…

c语言编程规范第三部分

3、头文件应向稳定的方向包含 头文件的包含关系是一种依赖&#xff0c;一般来说&#xff0c;应当让不稳定的模块依赖稳定的模块&#xff0c;从而当不稳定的模块发生变化时&#xff0c;不会影响&#xff08;编译&#xff09;稳定的模块。就我们的产品来说&#xff0c;依赖的方向…

数据复制 软件 SnapMirror:统一复制,更快恢复

数据复制 软件 SnapMirror&#xff1a;统一复制&#xff0c;更快恢复 预测未知领域是一项棘手的工作。让 SnapMirror 软件来处理则轻松得多。 通过数据的高可用性和快速数据复制&#xff0c;可即时访问业务关键型数据。放松一下&#xff0c;它会让你满意的。 为什么用 SnapMi…

3D目标检测(一)—— 基于Point-Based方法的PointNet系列

3D目标检测&#xff08;一&#xff09;—— PointNet&#xff0c;PointNet&#xff0c;PointNeXt&#xff0c; PointMLP 目录 3D目标检测&#xff08;一&#xff09;—— PointNet&#xff0c;PointNet&#xff0c;PointNeXt&#xff0c; PointMLP 前言 零、网络使用算法 …

AQS与Synchronized异曲同工的加锁流程

在并发多线程的情况下&#xff0c;为了保证数据安全性&#xff0c;一般我们会对数据进行加锁&#xff0c;通常使用Synchronized或者ReentrantLock同步锁。Synchronized是基于JVM实现&#xff0c;而ReentrantLock是基于Java代码层面实现的&#xff0c;底层是继承的AQS。 AQS全称…

c++函数对象(仿函数)、谓词、内建函数对象

1、函数对象 1.1 概念 重载函数调用操作符的类&#xff0c;这个类的对象就是函数对象&#xff0c;在使用这个函数对象对应使用重载的&#xff08;&#xff09;符号时&#xff0c;行为类似于函数调用&#xff0c;因此这个函数也叫仿函数。 注意&#xff1a;函数对象&#xff0…

多个任务并行的时候,你是否总是会手忙脚乱?

很多重要事情之所以变得迫在眉睫&#xff0c;需要立刻处理、应付&#xff0c;是因为被延误或没有进行足够的预防和准备&#xff0c;筹划。 面对多个任务并行的时候&#xff0c;你是否总是会手忙脚乱&#xff1f; 在项目工作中&#xff0c;管理者每天要面对各种工作&#xff…

移动WEB开发二、流式布局

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…

【Linux】线程函数和线程同步详细整理(金针菇般细)

目录 一&#xff0c;线程函数 1.获取当前线程ID 2.创建线程 3.退出线程 4.阻塞线程 5.分离线程 6.取消线程 7.线程比较 8.测试代码&#xff08;线程函数总结&#xff09; 二&#xff0c;线程同步 1.互斥锁 2.读写锁 3.条件变量 4.信号量 一&#xff0c;线程函数 …

【阿旭机器学习实战】【29】产品广告投放实战案例---线性回归

【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例&#xff0c;欢迎点赞&#xff0c;关注共同学习交流。 目录问题描述数据处理过程及源码通过数据可视化分析数据训练线性回归模型可视化训练好的线性回归模型结果预测问题描述 你所在的公司在电视上做产…

mybatis狂神(附自学过程中疑问解决)

首先先附上mybatis的官方文本链接mybatis – MyBatis 3 | 简介一、Mybatis介绍MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来…

Comparator和Comparable的区别以及Collections.sort排序原理

一、概述 Comparable和Comparator都是两个接口&#xff0c;接口都可以用来实现集合中元素的比较、排序&#xff0c;Comparator位于包java.util下&#xff0c;而Comparable位于包java.lang下&#xff0c;Comparable接口将比较代码嵌入自身类中&#xff0c;而Comparator既可以嵌…

非标题党:前端Vue React 项目编程规范化配置(大厂规范)

前端项目编程规范化配置 下述例子主要是从 代码规范化 以及 git 提交规范化 两方面进行配置。内容很多&#xff0c;请做好心理准备 一、代码检测工具 ESLint 在我们通过 vue create “项目名” 时&#xff0c;我们可以通过手动配置的方式&#xff0c;来配置 ESLint 来对代码进…

QDateTime的11种显示方式

QDateTime datetime QDateTime::currentDateTime(); datetime.toString(“hh:mm:ss\nyyyy/MM/dd”); datetime.toString(“hh:mm:ss ap\nyyyy/MM/dd”); datetime.toString(“hh:mm:ss\nyyyy-MM-dd”); datetime.toString(“hh:mm:ss ap\nyyyy-MM-dd”); datetime.to…

【分享】订阅用友YonSuite集简云连接器同步销售出库数据至用友YonSuite

方案场景 在企业中因多种系统孤立导致数据割裂&#xff0c;是现企业中现阶段面临的最大问题&#xff0c;而钉钉作为常用的OA审批系统&#xff0c;用友YonSuite作为ERP系统&#xff0c;原方式钉钉内完成审批再由人工将数据同步到用友YonSuite系统&#xff0c;数据同步过程中不仅…

将HTTP接口配置成HTTPS

一、使用Java的keytool.exe程序生成本机的TLS许可找到Java的jdk目录进入bin默认安装路径C:\Program Files\Java\jdk1.8.0_91\bin 进入命令面板&#xff0c;在bin的路径栏中输入cmd敲击回车即可使用keytoolkeytool -genkeypair -alias tomcat_https -keypass 123456 -keyalg RSA…

linux线程的基本知识

这里用的是Linux的pthread线程库&#xff0c;需要加pthread线程库。 线程的创建 第一个参数是线程id的地址。第二个参数是线程属性&#xff0c;一般为NULL。第三个是要执行的函数。第四个是函数的参数&#xff0c;一般也为NULL 线程的等待&#xff0c;第一个参数是线程的id,第…

VBA提高篇_27 OptionBOX_CheckBox_Frame_Image_VBA附加控件

文章目录1.单选按钮OptionBOX:2.复选框CheckBox:3.框架Frame:4.图像Image: (loadPictrue)5. VBA附加控件:6. 适用于很多控件的重要属性:1.单选按钮OptionBOX: 默认时,同一窗体的所有单选按钮均属于同一组,只能选中一个 可通过Frame控件进行分组解决. 2.复选框CheckBox: 一次可以…