使用Vuex的原因其作用与使用方法

一、为什么要使用vuex

1.1 直接举例子直观感受下:

此时我有5个控件1 2 3 4 5 其中 1是3子组件 2是4的子组件

当1要用3的数据时 可以直接传递 同理2用4的数据也可以直接传递,但1和2要用5的生成数据时 那就需要逐层传递, 此时就有点麻烦了,此处只传递2个控件 但设想一下 有10个控件需要传递呢?

1.2 使用场景【状态在组件间共享】

能解决多个界面间的共享问题,统一响应式管理

  1. 用户登陆状态,用户、名称、头像、地理位置等 可以保存状态
  2. 商品收藏,购物车物品等【可在关闭前统一上传】
  3. 需要共享的状态信息

二、vuex使用方法

2.1 安装vuex

  在需要使用的路径下执行 npm install vuex --save 安装

2.2 store引入前提

  • 在文件目录下创建store文件 将vuex仓库封装在index.js中

      

  • index.js书写【官方建议单一状态树,只将数据保存在一个store中】

    • 导入插件
    • 安装插件
    • 创建对象
    • 导出对象
//index.js//1.导入插件
import Vue from ‘vue‘
import Vuex from ‘vuex‘

//2.安装插件
Vue.use(Vuex)

//3.创建对象
const store = new Vuex.Store({
    state:{            //共享的数据
        age:18
    },
    mutations:{    //同步方法    类似于methods 可接收传入参数payload=》obj|arr|num
        increment(state,payload){
            state.age++;
        }
    },
    actions:{    //异步方法
        updateinfo(context){
            return new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    context.commit(‘increment‘)
                    resolve()
                },1000)
            })
        }
    },
    getters:{        //将数据处理后返回    类似于computed
        doubleage(state){
            return function(age){
                return age++;
            }
        }
    },
    modules:{//定义模块
        a:{
            state:{},
            mutations:{},
            actions:{},
            getters:{}
        }

    }
})

//3.导出store模块
export default store

下图为官方给出的vuex执行流程

  • 修改state数据只能通过mutation
  • 异步操作只能放在action中  因此只能通过action调用mutation的方法再去修改state
  • 注意vuex中数据 只能修改已存在属性

    不能直接用常规state.info[‘name‘]=cc添加 此为非响应式

    只能Vue.set(state.info,‘name‘,‘cc‘)    此为响应式

2.3 页面中使用

  • 当要使用时第一步先得在main.js中导入

    • 等价于定义Vue.prototype.$store=store 在原型中加入属性 所有页面可以使用  
//main.jsimport Vue from ‘vue‘
import App from ‘./App.vue‘
import router from ‘./router/index.js‘
import store from ‘./store/index.js‘

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
    router,
    store
}).$mount(‘#app‘)
  • vue页面使用

    • 注意点

      • 修改state数据只能通过mutation中的方法!!!!
      • 调用mutation中的方法需要用commit
      • 调用actions中的方法需要用dispatch
      • 皆有两种方式调用store中的mutation与actions
        • 1.  (‘函数名‘,负载参数)    【接收payload只包含payload】
        • 2.  ({

              type:‘函数名‘, 

              payload1:‘负载参数1‘,

              payload2:‘负载参数2‘,

            })                                           【接收payload包含整个obj】

//test.vue<template>
    <div id="test">
        <h1>{{$store.state.age}}</h1>        <!-- 直接使用state数据 -->
        <button @click="add"></button>
        <h1>{{$store.getters.doubleage}}</h1>    <!-- 调用getters中函数 -->
        <button @click="update"></button>
    </div>
</template>

<script>
    export default {
        methods:{
            add(){        //调用mutations中函数
                let payload = 2
                //this.$store.commit(‘increment‘,payload)    此方法在后台直接接收payload
                this.$store.commit({    //此方法在后台接收整个obj对象{type,payload}
                    type:‘increment‘,
                    payload
                })
            },
            update(){
                this.$store.dispatch(‘updateinfo‘).then(res=>{ //使用dispatch调用异步操作即actions中的函数
                    console.log(res)                           //返回的时promise对象对其进行操作
                })
            }
        }
    }
</script>

<style>
</style>

原文地址:https://www.cnblogs.com/cc123nice/p/12603649.html

时间: 2024-08-01 05:55:59

使用Vuex的原因其作用与使用方法的相关文章

node app.js不起作用的解决方法

In Express 3.0, you normally would use app.configure() (or app.use() ) to set up the required middleware you need. Those middleware you specified are bundled together with Express 3.0. e.g. var express = require('express'); var routes = require('./ro

JAVA 注解的几大作用及使用方法详解

JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解析注解 来使用这些数据),常见的作用有以下几种: 1.生成文档.这是最常见的,也是java 最早提供的注解.常用的有@see @param @return 等:

PHP trim()函数的作用和使用方法

PHP trim()函数一般是用来去除字符串首尾处的空白字符(或者其他字符),一般在用在服务端对接收的用户数据进行处理,以免把用户误输入的空格存储到数据库,下次对比数据时候出错. 该函数有两个参数,第二个可以为空,格式如下: trim ( string $str [, string $character_mask = ” \t\n\r\0\x0B” ] ): $str 为需要处理的字符串,如果$character_mask不为空,只会清楚$character_mask上写的要求清楚的字符:如果第

serialVersionUID的作用以及设置方法(转)

声明:本篇文章是转载的 http://blog.csdn.net/kakaxi_77/article/details/8129070 http://snowlotus.iteye.com/blog/247129 java文件中serialVersionUID的作用 http://blog.csdn.net/hulefei29/article/details/2823221 serialVersionUID的作用 http://www.blogjava.net/invisibletank/arch

C++ &amp;quot;#&amp;quot;的作用和使用方法

本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/48879093 1 #和##的作用和使用方法 C/C++ 的宏中,#的功能是将其后面的宏參数进行字符串化操作.简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引號.##连接符号由两个井号组成,其功能是在带參数的宏定义中将两个子串联接起来,从而形成一个新的子串. 但它不能够是第一个或者最后一个子串. #include <iost

子网掩码的作用和设置方法

子网掩码是每个网管必须要掌握的基础知识,只有掌握它,才能够真正理解TCP/IP协议的设置.以下我们就来深入浅出地讲解什么是子网掩码. IP地址的结构 要想理解什么是子网掩码,就不能不了解IP地址的构成.互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构.IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于IP地址的寻址操作. IP地址的网络号和主机号各是多少位呢?如果不指定,就不知道哪些位是网络号.哪些是主机号,这就需要通

【TCP】四次握手原因 / TIME_WAIT作用

为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达server.本来这是一个已经失效的连接报文,但是server接收到这个连接报文之后,误认为client发起了新的连接,于是向client发送确认报文段.此时因为没有了连接的3次握手,client不会对server的确认报文作出回应,也不会向server发送数据,server就以为连接已经建立,一直在空等

ie6 z-index不起作用的解决方法

一.概念 z-index伴随着层的概念产生的.网页中,层的概念与photoshop或是flash中层的概念是一致的.熟悉photoshop或是flash的应该知道,层级越高(图层越靠上),越在上面显示,如果层发生重叠,层级高的会覆盖层级低的,如果非透明或半透明,则会遮挡. 在photoshop中 层的高低就是靠手动调的,鼠标拖拽,或是ctrl+]或是ctrl+shift+[快捷键改变层的次序.如下图,鼠标拖移改变层次序的过程中: 在flash中 类似,可以手动改变图层次序,或是使用as脚本,例如

关于css中的vertical-align: middle不起作用的解决方法

正在学前台,出现了vertical-align: middle 这个属性怎么都不起作用的情况,解决过程如下: 刚开始是这样: .table_yht{ text-align: center; vertical-align: middle; } 发现文字左右的确居中,但是上下不能居中,然后请教了大神,才知道原因.原来是因为我们引用的css包里也设置了这个属性,而且默认优先级是最高的,所以我们再怎么设置也不起作用了.要改变这种情况,就要想办法在我们写的类里的属性的优先级提高,可以这样: .table_