vue组件通信传值——Vuex

一、Vuex介绍

  Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

  Vuex 也集成到 Vue 的官方调试工具devtools extension,提供了诸如零配置的 time-tavel 调试、状态快照导入导出等高级调试功能。

1、状态管理模式

  一个简单的 Vue 计数应用范例如下所示:

new Vue({
  // state
  data () {
    return {
      count: 0
    }
  },
  // view
  template: `
    <div>{{ count }}</div>
  `,
  // actions
  methods: {
    increment () {
      this.count++
    }
  }
})

  状态自管理应用包含如下部分:

  • state,驱动应用的数据源;
  • view,以声明方式将state映射到视图;
  • actions,响应在view上的用户输入导致的状态变化;

2、单向数据流理念

  用下图表示“单向数据流”理念的简单示意:

  

  但在应用遇到 多组件共享状态 时,单向数据流的简洁性很容易遭到破坏:

(1)问题一:多个视图依赖于同一状态。

  传参的方法对于多层嵌套的组件将会非常繁琐,并且对于兄弟组件间的状态传递无能为力。

(2)问题二:来自不同视图的行为需要变更同一状态。

  经常会采用父子组件直接引用或者通过事件来变更和同步状态的多份拷贝。以上的这些模式非常脆弱,通常会导致无法维护的代码。

(3)解决思路

  把组件的共享状态抽取出来,以一个全局单例模式管理!!

  在这种模式下,我们的组件树构成了一个巨大的“视图”,不管在树的哪个位置,任何组件都能获取状态或者触发行为!

  通过定义和隔离状态管理中的各种概念并通过强制规则维持视图和状态间的独立性,我们的代码将会变得更结构化且易维护。

  以上也是Vuex背后的基本思想,借鉴了 Flux、Redux 和 The Elm Architecture。与其他模式不同的是,Vuex 是专门为 Vue.js 设计的状态管理库,以利用 Vue.js 的细粒度数据响应机制来进行高效的状态更新。

3、Vuex图解

  

  首先通过vue组件触发,比如执行了一个按钮事件,修改一个页面中的数据。然后通过dispatch方法分发到Vuex(类似一个商店,包含有Actions、Mutations、State),将数据共享给Vuex中的State(一定是关联于某个组件的某个标签上);当要更改数据时,先分发到Actions,再提交给Mutations,随后修改State。最后通过Render方法将数据渲染到vue组件中。

  需要特别注意:Dispatch这一步是异步的,而Commit这一步是同步的。

二、Vuex实践

1、安装Vuex

(1)直接下载/CDN引用方式

  CDN地址:https://unpkg.com/vuex,该链接一直指向NPM上发布的最新版本。

  还可以使用 https://unpkg.com/[email protected] 这样的方式指定特定的版本。

  当使用全局script标签引用 vuex 时,会进行自动安装:

<script src="/path/to/vue.js"></script>
<script src="/path/to/vuex.js"></script>

(2)NPM安装

npm install vuex --save

  在模块化的打包系统中,必须显式地通过 Vue.use()来安装Vuex:

import Vue from ‘vue‘
import Vuex from ‘vuex‘

Vue.use(Vuex)

2、vuex-demo项目创建配置

  创建测试项目如下所示:

$ vue init webpack vuex-demo

? Project name vuex-demo
? Project description A Vue.js project
? Author xiugeng <443614404@qq.com>
? Vue build standalone
? Install vue-router? No
? Use ESLint to lint your code? No
? Set up unit tests No
? Setup e2e tests with Nightwatch? No
? Should we run `npm install` for you after the project has been created? (recom
mended) npm

   vue-cli · Generated "vuex-demo".

  安装vuex组件:

$ cd vuex-demo/
$ npm install vuex -S

原文地址:https://www.cnblogs.com/xiugeng/p/11271150.html

时间: 2024-11-06 04:30:19

vue组件通信传值——Vuex的相关文章

Vue 组件通信

今天学习了,vue组件通信本篇随笔主要对今天的学习成果进行总结.有什么不对的地方还望谅解! 首先,Vue的核心即组件化开发,所以组件通信就显得十分重要. 组件通讯包括:父子组件间的通信和兄弟组件间的通信. 1.子组件获取父组件中数据间: var Child={ template:"#child", props:['mes'], data:function(){ return { data:this.$props.mes, //调用该子组件 props 中的对应属性的属性值: } } 通

Vue组件通信模式

概述 在Vue.js中,有几种我们能用的内部组件通信的方法.一般的属性和事件对于大多数场景来说已经够用了,但是除此之外,还有其他可用的方法. 属性和事件 当然,一般的通信方法用到了属性和事件.这种常用的模式是组件中一种强大的通信方式,它不用在相关的组件上引入任何依赖和限制. 属性 属性允许你传递任意的数据类型到一个子组件中,并且允许你控制组件接收何种类型的数据.属性的更新也是响应式的,这使得无论任何时候,父组件的数据改变,子组件就会更新. 模板用法: 123 <my-component v-bi

vue组件通信的几种方式

最近用vue开发项目,记录一下vue组件间通信几种方式 第一种,父子组件通信 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Child.vue 2.Child.vue的中创建props,然后创建一个名为message的属性 child.png 3.在App.vue中注册Child组件,并在template中加入child标签,标签中添加message属性并赋值 App2.png 4.保存修改的文件,查看浏览器 browser.png 5.我们依然可以对m

vue组件间传值

父组件向子组件传递数据 // 父组件传递 <dialogAttendee :dialogcascaderVisible="dialogcascaderVisible"></dialogAttendee> // 子组件接接收 props:{ dialogcascaderVisible: { type: Boolean, default: false }, reservation: Array, } 父组件改变子组件中的数据 // 父组件中引用子组件 <son

vue组件通信

1.子组件如何快速改变父组件中传过来的值(通过引用传递的方式给子组件,子组件可以直接改变对象中的属性) // App.vue <template> <div> <News :a-msg="msg" :out-data="outData"></News> {{msg}} <h3>{{outData.a}}</h3> </div> </template> <script

Vue组件间传值 v-model

使用过Vue的同学应该都了解组件之间传值 父组件 --> 子组件 : props 子组件 --> 父组件 : 事件 其实有一种更为简单的方法,是基于上述两种方法,那就是 v-model 我们都在表单中使用过 v-model 来绑定数据,其实组件之间也是可以用 v-model 进行双向绑定的 我们来了解一下 v-model 的原因 <input type="text" v-model="message" /> <!--其实上面这种写法只是

vue组件通信(props,$emit,$attrs,$listeners)

朝颜陌 vue基础----组件通信(props,$emit,$attrs,$listeners) 一.父传子,子传孙 1. props 1>在父组件中通过子组件自定义的标签属性来传递数据. 2>在子组件中通过props声明希望用到的数据 1 <body> 2 <div id="app"> 3 <my-father :msg1="msg" a="10" :b="20" @click1=&

Vue组件通信之非父子组件传值

前言: 如果想要了解非父子关系的组件传值,最好是在了解父传子和子传父的基础上在来了解非父子传值可能会有更透彻的思路. 因为非父子传值是通过定义事件总线来代理实现父传子+子传父从而实现的传值方式. 这是我总结的父子传值相关的知识,可供参考: https://www.cnblogs.com/ViavaCos/p/11712131.html 然后大概回顾一下父子传值的过程: 根据上述信息可知,如果两个组件需要传递值那么需要这两个组件之间是父子关系才能传递数据. 那么如果有这样一个组件,既可以帮你传递数

vue组件化开发-vuex状态管理库

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试.状态快照导入导出等高级调试功能. 以上是vuex的官方文档对vuex的介绍,官方文档对vuex的用法进行了详细的说明.这里就不再细讲vuex的各个用法,写这篇博客的目的只是帮助部分同学更快地理解并上手vuex.