草庐IT

vuex总结

sunpy 2023-03-28 原文

什么是父子组件


使用components,引入的组件为子组件,子组件所在的当前组件为父组件。

<template id="info">
    <div>
        <p>我是组件</p>
    </div>
</template>
<div id="app">
    <info></info>
</div>

new Vue({
    el: '#app',
    components:{
        "info":{
            template:"#info",
        },
    },
    data() {
        return {
            
        }    
    }
});
// info组件就是当前app组件的子组件

vue中数据共享方式


父组件向子组件传值:v-bind属性绑定

<template id="info">
    <div>
        <p>{{val}}</p>
    </div>
</template>
<div id="app">
    <info v-bind:val="nameData"></info>
</div>

new Vue({
    el: '#app',
    components:{
        "info":{
            template:"#info",
        },
    },
    data() {
        return {
            nameData:"张三"        
        }    
    }
});
// info组件就是当前app组件的子组件

子组件向父组件传值:v-on事件
兄弟之间共享数据:EventBus
emit:发送数据的组件

vuex介绍

vuex:实现组件之间数据共享
vuex官网:https://vuex.vuejs.org/zh/
配置:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count:0
  },
  getters: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

store数据共享


store练习:加减器

<template>
    <div>
        <p>当前值为{{this.count}}</p>
        <p>-----------------------------</p>
        <p>当前值为{{this.$store.state.count}}</p>
    </div>
</template>
import { mapState } from 'vuex';
<script>
export default {
    name: "Mall",
    data() {
        return {

        }
    },
    computed: {
       ...mapState(['count'])
    }
}
</script>

vuex中store获取共享数据,便于操作:

this.$store.state.xxxxx

vuex通过mapState映射 this.count 为 store.state.count

computed: {
    ...mapState(['count'])
}

Mutation实现数据操作


mutations: {
    add(state) {
      state.count++;
    },
    substract(state) {
      state.count--;
    }
}

调用方式:his.$store.commit("方法名")

export default {
    name: "Subtract",
    data() {
        return {

        }
    },
    methods: {
        substractNum() {
            this.$store.commit("substract");
        }
    }
}

Mutation传递参数:

mutations: {
    add(state, payload) {
      state.count += payload.amount
    },
    substract(state, payload) { // payload为一个对象,里面传入多个参数。
      state.count -= payload.amount
    }
}

调用方式:this.$store.commit("方法名", 参数名);

<template>
    <div>
        <el-button @click="substractNum()">减{{amount}}</el-button>
    </div>
</template>

<script>

export default {
    name: "Subtract",
    data() {
        return {
            amount:3
        }
    },
    methods: {
        substractNum() {
            let payload = {};
            payload.amount = this.amount;
            this.$store.commit("substract", payload);
        }
    }
}
</script>

第二种写法:使用mapMutations,将本地方法映射为$store.commit("方法名")

<script>
import { mapMutations } from 'vuex'

export default {
    name: "Add",
    data() {
        return {
            amount: 5
        }
    },
    methods: {
        ...mapMutations(['add']),
        addNum() {
            let payload = {};
            payload.amount = this.amount;
            this.add(payload);
        }
    }
}
</script>

注意:mutation 必须是同步函数

action:实现异步操作


配置:

export default new Vuex.Store({
  state: {
    count:0
  },
  getters: {
  },
  mutations: {
    add(state, payload) {
      state.count += payload.amount
    },
    substract(state, payload) {
      state.count -= payload.amount
    }
  },
  actions: {
    substractAsync(context, step) {
      setTimeout(() => {
        // 调用mutations中的同步方法add
        context.commit('substract', step);
      }, 1000)
    }
  },
  modules: {
  }
})

使用dispatch调用:

methods: {
    substractNum() {
        let payload = {};
        payload.amount = this.amount;
        // this.$store.commit("substract", payload);
        this.$store.dispatch("substractAsync", payload);
    }
}

第二种调用写法:

import { mapActions } from 'vuex';

methods: {
    ...mapActions(['substractAsync']),
    substractNum() {
        let payload = {};
        payload.amount = this.amount;
        // this.$store.dispatch("substractAsync", payload);
        this.substractAsync(payload);
    }
}

Getter:对store中的数据加工处理形成新的数据(包装器)


不会修改store中的数据
store数据发生变化,Getter中的数据也会发生变化

getters: {
    getCount: state => {
      return state.count;
    },
    getCount1(state) {
      return state.count;
    }
}

调用方式:

<template>
    <div>
        <p>当前值为{{this.$store.getters.getCount}}</p>
        <p>当前值为{{this.$store.getters.getCount1}}</p>
    </div>
</template>

第二种调用方式:

import { mapActions } from 'vuex';

computed: {
   ...mapGetters(['getCount'])
}

有关vuex总结的更多相关文章

  1. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  2. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法 - 2

    文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景  最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。  在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记

  3. 【动态规划】背包问题(详细总结,很全) - 2

    【动态规划】一、背包问题1.背包问题总结1)动规四部曲:2)递推公式总结:3)遍历顺序总结:2.01背包1)二维dp数组代码实现2)一维dp数组代码实现3.完全背包代码实现4.多重背包代码实现一、背包问题1.背包问题总结暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化!背包问题是动态规划(DynamicPlanning)里的非常重要的一部分,关于几种常见的背包,其关系如下:在解决背包问题的时候,我们通常都是按照如下五部来逐步分析,把这五部都搞透了,算是对动规来理解深入了。1)动规四部曲:(1)确定dp数组及其下标的含义(2)确定递推公式(3)dp数组的初始化(4)确定遍历顺

  4. 相机面试问题总结 - 2

    1,Camera基本工作原理答案:光线通过镜头Lens进入摄像头内部,然后经过IRFilter过滤红外光,最后到达sensor(传感器),senor分为按照材质可以分为CMOS和CCD两种,可以将光学信号转换为电信号,再通过内部的ADC电路转换为数字信号,然后传输给DSP(如果有的话,如果没有则以DVP的方式传送数据到基带芯片baseband,此时的数据格式RawData,后面有讲进行加工)加工处理,转换成RGB、YUV等格式输出。数据流是如何从sensor到APP的?上述描述结束后,在ISP处理后面的阶段,数据会进行分流,分为capture,preview,video等以供后续动作使用。例如

  5. 【结构与算法】—— 数据结构代码总结 | 数据结构代码大全 - 2

    📢博客主页:https://blog.csdn.net/dxt19980308📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由肩匣与橘编写,首发于CSDN🙉📢生活依旧是美好而又温柔的,你也是✨目录🔴线性表1.1顺序表1.1.1顺序表定义1.1.2顺序表基本操作1.2单链表1.2.1单链表节点定义1.2.2单链表基本操作1.3双链表1.3.1双链表节点定义1.3.2双链表基本操作1.4静态链表🟠栈和队列2.1栈2.1.1顺序栈2.1.2链式栈2.2队列2.2.1顺序队列2.2.2链式队列2.3应用🟡串3.1串的定义与实现3.2串的模式匹配🟢树与二叉树4.1二叉树4.1.1二叉树的概念4.1.2

  6. MyBatisPlus总结 - 2

    目录MyBatisPlusMP特点MP框架结构MP使用准备导入依赖springboot整合mybatisplus配置文件定义好实体类User后编辑mapper接口@Mapper与@MapperScan("包名")区别MP基本操作新增操作删除操作通过id删除用户通过map作为条件删除通过多个id实现删除更新用户通过id进行用户更新查询用户 根据id查询用户根据多个id查询用户根据map集合作为条件查询用户通用Service接口一些操作 查询总记录数批量添加数据MP常用注解雪花算法前言垂直分表水平分表条件构造器继承结构使用条件构造器实现查询操作查询所有用户根据构造器查询主键字段集合根据条件构造器查

  7. Solidity合约内创建合约以及引用其他合约的总结 - 2

    本文总结了在以太坊智能合约中使用Solidity在合约内创建合约以及引用其他合约的方法,包括了如何使用mochai进行测试的方法。在这之前先明白一个比较:Contract{}相当于面向对象语言的类当部署后获得到address后,address相当于对象,address0x.......本身就类似指针地址然后我们讨论下Solidity代码中对合约类,合约对象的操作。Solidity首先区分下三种写法:import'ContractB.sol';ConractBB=newConractB(arg1,arg2...);ContractBB=ContractB(Baddress);functionse

  8. 山东大学项目实训(二十七)—— 微信小程序开发总结,一年时间真的可以改变一个人很多 - 2

    智慧医院不良事件精细化管理平台——微信小程序总结一、实现的功能二、项目收获三、总结(经历分享)一、实现的功能到目前为止,微信小程序开发,到此就算是结束了,其中实现了不少功能,如下:1.1角色与权限(后端同学实现的,写这个方便介绍后面的功能)平台可以配置不同的用户角色并授予其不同的操作权限。每个用户在使用平台时都需要指定一个角色。1.2可视范围——根据角色绑定的权限菜单全体职工可以查看自己上报的事件(待审核、已通过、被驳回)。质控人员可以查看所有的事件(待审核、待评价、已通过、已驳回、已评价)。职能人员可以查看自己/自己部门负责的事件(待整改、待评价、已评价)。各科室医务人员可以查看本科室相关的

  9. javascript - 使用 Vuex 的 Vue.js 中的计算属性上的观察者未更新数据变量 - 2

    fiddle:https://jsfiddle.net/mjvu6bn7/我有一个计算属性的观察者,它依赖于异步设置的Vuex存储变量。当这个计算属性发生变化时,我试图设置Vue组件的数据变量,但这并没有发生。这是Vue组件:newVue({el:'#app',store,data:{myVar:""},beforeMount(){this.$store.dispatch('FETCH_PETS',{}).then(()=>{console.log("fetchedpets")})},computed:{pets(){returnthis.$store.state.pets}},wat

  10. javascript - 未在实例上定义但在渲染期间引用的属性或方法 I Vuex - 2

    我收到以下错误。[Vuewarn]:Propertyormethod"updateData"isnotdefinedontheinstancebutreferencedduringrender.Makesuretodeclarereactivedatapropertiesinthedataoption.据我所知,代码已经有了方法,所以由于我对Vuex的无知,我被困在了一些我错过的东西上。我用谷歌搜索了这个问题并得到了很多答案,但没有一个让我更明智地去做。我感觉这似乎是有范围的。我也遇到了下面的错误,但我怀疑这两者的根本原因相同,所以解决一个就会解决另一个。[Vuewarn]:Inval

随机推荐