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

目录
相关文章
|
3月前
|
存储 JavaScript
解锁Vuex高级玩法:模块化与插件共舞,让你的Vue项目状态管理如虎添翼!
【8月更文挑战第27天】Vuex是一款专为Vue.js应用程序设计的状态管理模式及库,它通过集中管理组件状态来确保状态变更的可预测性。在大型应用中,采用模块化管理可以让代码结构更加清晰,同时利用插件增强功能。模块化管理允许将store拆分为包含各自state、mutations、actions和getters的独立模块。插件则能监听状态变化,实现诸如日志记录或数据持久化等功能。本文通过具体示例介绍了如何在Vuex中实现模块化管理和插件的高级应用。
55 1
|
3月前
|
JavaScript 前端开发 网络协议
Vue.js 与 WebSocket 的惊世联姻!实时数据通信的震撼变革,你敢错过?
【8月更文挑战第30天】在现代Web开发中,实时数据通信至关重要。Vue.js作为流行前端框架,结合WebSocket技术,实现了高效实时的数据交互。本文简要介绍了WebSocket原理及其在Vue.js项目中的应用方法,包括建立连接、监听事件及数据处理等步骤,展示了如何利用二者结合轻松应对实时聊天、股票更新等多种场景,为开发者提供了实用指南。希望本文能帮助您更高效地实现Web应用的实时通信功能。
151 0
|
10天前
|
JavaScript UED
"Vue实战技巧大揭秘:一招解决路由跳转页面不回顶部难题,让你的单页面应用用户体验飙升!"
【10月更文挑战第23天】在Vue单页面应用中,点击路由跳转时,默认情况下页面不会自动滚动到顶部,这可能影响用户体验。本文通过一个新闻网站的案例,介绍了如何使用Vue-router的全局前置守卫和`scrollBehavior`方法,实现路由跳转时页面自动滚动到顶部的功能,提升用户浏览体验。
42 0
|
3月前
|
缓存 JavaScript API
【颠覆想象!】Vue 3全新Reactivity API:解锁响应式编程的终极奥秘,让你的Web应用瞬间变身超能战士!
【8月更文挑战第12天】Vue 3带来了革新性的响应式系统,基于Proxy技术,提升了性能并提供了强大的API。本文通过示例介绍核心API `reactive` 和 `ref` 的使用,展示如何创建、更新响应式对象与引用,探讨深度响应式、响应式数组的管理,以及如何运用计算属性和侦听器优化应用。此外,还介绍了如何构建自定义响应式逻辑,让开发者能更高效地开发高性能Web应用。
49 1
|
3月前
|
JavaScript API
【Vue 3】effectScope 究竟为何物?其运作机制如何?又能为我们化解哪些难题?
【Vue 3】effectScope 究竟为何物?其运作机制如何?又能为我们化解哪些难题?
|
3月前
|
JavaScript 前端开发 C++
【Vue.js的终极对决】服务端渲染VS客户端渲染:一场关乎速度与SEO的生死较量!
【8月更文挑战第30天】Vue.js 是一个流行的 JavaScript 框架,支持服务端渲染(SSR)和客户端渲染。SSR 在服务器生成完整 HTML,有利于 SEO 并缩短首屏加载时间,但增加服务器负担;客户端渲染则在浏览器生成页面,提升交互性,降低服务器负载。本文通过代码示例对比两者优劣,并提供选择指南,帮助开发者根据 SEO 需求、交互性需求及服务器资源等条件,选择合适的渲染方式,从而优化应用性能和用户体验。
68 0
|
3月前
|
缓存 前端开发 JavaScript
【揭秘Rails高手都在用的秘密武器!】—— 资产管道:它是如何悄无声息地改变我们管理前端资源的方式?
【8月更文挑战第31天】资产管道是Ruby on Rails 3.1引入的特性,用于简化Web应用中CSS、JavaScript和图片等前端资源的管理和打包。它将静态资源集中管理并自动处理合并、压缩及版本控制,提升页面加载速度和用户体验。本文通过示例代码详细介绍了如何在Rails应用中配置和使用资产管道,包括创建目录结构、编写样式表和JavaScript文件以及在布局文件中引用静态资源。与传统方法相比,资产管道提供了更高效和自动化的解决方案,有助于提高开发效率和应用性能。
28 0
|
3月前
|
JavaScript 前端开发 安全
TypeScript:解锁JavaScript的超级英雄模式!类型系统如何化身守护神,拯救你的代码免于崩溃与混乱,戏剧性变革开发体验!
【8月更文挑战第22天】TypeScript作为JavaScript的超集,引入了强大的类型系统,提升了编程的安全性和效率。本文通过案例展示TypeScript如何增强JavaScript:1) 显式类型声明确保函数参数与返回值的准确性;2) 接口和类加强类型检查,保证对象结构符合预期;3) 泛型编程提高代码复用性和灵活性。这些特性共同推动了前端开发的标准化和规模化。
56 0
|
6月前
|
存储 前端开发 JavaScript
【亮剑】在Web开发中,滚动事件(onScroll)是一个常见且强大的交互手段。
【4月更文挑战第30天】在React中,利用`onScroll`事件可实现无限滚动、动态加载和视差效果。通过`componentDidMount`和`componentWillUnmount`(类组件)或`useEffect`(函数组件)添加/移除滚动监听器。为了优化性能,需注意节流、防抖、虚拟滚动和避免同步计算。实战案例展示了如何结合Intersection Observer实现无限滚动列表,当最后一个帖子进入视口时加载更多数据。关注性能,确保应用流畅。
98 0