vuex:页面通信的终极武器

简介: vue组件传值的终极武器,初次接触vuex,异常强大。

什么叫vuex?

官网地址
官方解释: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。通俗的说就是一个仓库管理系统,一个对数据动态管理的仓库。你可以存储数据,可以改变数据,可以读取数据,还可以监控数据的变化,总之,它比之前的事件总线更强大。

安装方式

如果你没有安装它可以用npm这样安装
npm install --save vuex

配置vuex

首先我们创建一个文件store.js,随便放在那个地方,我的放在assets目录下,其内容是

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

//数据的仓库
const state = {
   items:[],
   mg:'1',
   flag:'2' 
}

//对数据的简单处理,相当于computed,但不能改变state内数据的值
const getters = {
   mg(state){
      return state.mg;
   }
}

//改变数据的唯一方式
const mutations = {
  //第一个参数是默认的state,第二个参数是页面传过来的(即可以修改或是保存)
   increment(state,list){
        state.mg = list;
     },
   
   add(state,dat){
        state.flag = dat;
   }
}

//Action类似于mutation, Action提交的是mutation,而不是直接变更状态Action是异步的mutation是同步的。
const actions = {
  //
}

const store = new Vuex.Store({
   state,
   getters,
   mutations,
   actions
})

export default store

state, getters, mutations,actions是构造器(vuex.store)的四个最重要的,也是最主要的参数。强调一下,改变数据(修改,存储)只有一种方式,那就是通过mutations,其他的都不可以。

vuex的配置文件store.js写完后,到main.js中注册一下,所有的组件就都可以使用了。
image

然后我们来看看各个组件及内容(还是之前的示例)

image

donghua组件

<template>
    <div id="thirdchild">
        <h2>donghua</h2>
        <p>{{mg}}</p>
      <!-- <p>{{$store.state.mg}}</p> -->
      <button @click='action'>改变数值</button>
      <button @click='handleIncrement'>点击事件</button>
      {{flag}}
    </div>
</template>
<script>
export default {
  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
      dat:''
    }
  },
  computed:{
    /* mg(){
        return this.$store.state.mg;
     },*/
     mg(){
        return this.$store.getters.mg;
     },
     flag(){
        return this.$store.state.flag;
     }
  },
  methods:{
    action(){
      //改变state中的值或者说将值存入state中,关注commit的两个参数
      this.$store.commit('increment',10);
       this.$router.push('/firstchild');
    },
    handleIncrement(){
       this.$store.commit('add',10);
    }
  }
}
</script>

<style type="text/css">
  #thirdchild{
    width: 400px;
    height: 300px;
    border:solid red 1px;
  }
</style>

firstchild组件

<template>
    <div id="firstchild">
        <h2>firstchild</h2>
      <p>{{mssg}}</p>
      {{mg}}
      <button v-on:click='sendMsg'>firstchild组件传值</button>
    </div>
</template>

<script>
// import store from '../assets/donghua'

export default {
  
  data () {
    return {
      mssg:''
    }
  }, 
  computed:{
    mg(){
      return this.$store.state.mg;
    }
  },
  methods:{
      sendMsg:function(){
      
          this.$router.push('/second');
      }
  }
}
</script>
<style type="text/css">
  #firstchild{ 
    width: 400px;
    height: 140px;
    border:solid #000000 1px;
  }
</style>

路由

image

我们的目的是将donghua组件中的某个值改变后传到firstchild组件并显示出来。npm run dev 打开服务器后,首页(donghua.vue)

image

第一个组件firstchild

image

当我们点击“改变数值”的按钮后,它跳转到了firstchild组件并且它的值已经从1变成了10,说明我们使用vuex通信成功了。

我们来看看它的过程
donghua组件中我们通过按钮事件,将state的值改成了10,组件里想要存储值到state的唯一方法是mutations,我们说过,而操作mutations的方式就是commit('xx','yy')提交,第一个参数就是mutations里面的方法名称,第二个就是你想要改变的值。

image

firstchild组件接收到值后,通过计算属性的简单处理后,直接就可以用{{}}的语法表示出来,其实是可以直接读出state里的值的,就像这样
{{$store.state.mg}},但是为了更优雅一点就可以用计算属性处理下再表示,之前的vuex.store的四大核心之一的getters选项功能就是和computed的是一样的。

image

当然还有其他的一些函数和方式来使我们的代码更简洁,如mapState ,mapMutations,mapActions辅助函数及扩展运算符等,他们的用法官网上有辅助函数,也很简单,就不多说了。

简单的总结下
vuex核心的四个参数,state是数据仓库,所有要用的数据都放在这里;getters作用相当于计算属性computed,在数据放在dom中之前做一些简单的处理;Mutation 是改变state中数据的方法,所有的逻辑业务都可以放在这里处理它,而操作Mutation是通过commit方法;Action是类似于Mutation的,其内容是一样的,不同的是Action是处理异步的业务逻辑,像ajax,settimerout定时器等,且Action 提交的是 mutation,而不是直接变更状态官方解说。本节代码有需要的可以downloadGitHub

目录
相关文章
|
10天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
9天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
408 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
3天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
197 138
|
9天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
377 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
3天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
197 136
|
21天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1353 8
|
8天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
20天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1460 87