vue data变量之间相互赋值或进行数据联动

news2024/11/22 16:15:43

在这里插入图片描述
摘要:

使用vue时开发会用到data中是数据是相互驱动,经常会想到watch,computed,总结一下!

直接赋值:
在 data 函数中定义的变量可以直接在方法中进行赋值。

export default {
  data() {
    return {
      a: 1,
      b: 2
    };
  },
  methods: {
    updateA() {
      this.b = this.a + 1; // 将 a 的值加 1 赋给 b
    }
  }
};

计算属性 (Computed Properties):
计算属性可以根据其他 data 变量的值动态计算出新的值,并且会自动更新。

export default {
  data() {
    return {
      a: 1
    };
  },
  computed: {
    b() {
      return this.a + 1; // b 的值始终是 a 的值加 1
    }
  }
};

侦听器 (Watchers):
侦听器可以监听某个 data 变量的变化,并在变化时执行特定的逻辑。

export default {
  data() {
    return {
      a: 1,
      b: 2
    };
  },
  watch: {
    a(newVal) {
      this.b = newVal + 1; // 当 a 发生变化时,更新 b 的值
    }
  }
};

生命周期钩子:
在某些生命周期钩子中也可以进行数据的赋值和联动

export default {
  data() {
    return {
      a: 1,
      b: 2
    };
  },
  created() {
    this.b = this.a + 1; // 在组件创建时进行赋值
  }
};

事件处理:
通过事件处理函数也可以实现数据的联动。

export default {
  data() {
    return {
      a: 1,
      b: 2
    };
  },
  methods: {
    handleEvent() {
      this.a += 1;
      this.b = this.a + 1; // 在事件处理中更新 a 和 b
    }
  }
};

使用 Vuex 管理状态:
对于复杂的状态管理,可以使用 Vuex 来集中管理应用的状态。

// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    a: 1,
    b: 2
  },
  mutations: {
    updateA(state, value) {
      state.a = value;
      state.b = state.a + 1; // 更新 b 的值
    }
  },
  actions: {
    updateA({ commit }, value) {
      commit('updateA', value);
    }
  },
  getters: {
    b(state) {
      return state.b;
    }
  }
});

// 组件中使用
<template>
  <div>
    <p>a: {{ a }}</p>
    <p>b: {{ b }}</p>
    <button @click="updateA">Update A</button>
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState(['a', 'b'])
  },
  methods: {
    ...mapActions(['updateA'])
  }
};
</script>

组件中使用:(typescript)

<template>
  <div>
    <p>a: {{ a }}</p>
    <p>b: {{ b }}</p>
    <button @click="updateA">Update A</button>
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState(['a', 'b'])
  },
  methods: {
    ...mapActions(['updateA'])
  }
};
</script>

使用 Ref 和 Reactive (Vue 3):
在 Vue 3 中,可以使用 ref 和 reactive 来管理响应式数据。

<template>
  <div>
    <p>a: {{ a }}</p>
    <p>b: {{ b }}</p>
    <button @click="updateA">Update A</button>
  </div>
</template>

<script>
import { ref, computed } from 'vue';

export default {
  setup() {
    const a = ref(1);
    const b = computed(() => a.value + 1);

    const updateA = () => {
      a.value += 1;
    };

    return {
      a,
      b,
      updateA
    };
  }
};
</script>

使用 reactive:

<template>
  <div>
    <p>a: {{ state.a }}</p>
    <p>b: {{ state.b }}</p>
    <button @click="updateA">Update A</button>
  </div>
</template>

<script>
import { reactive, computed } from 'vue';

export default {
  setup() {
    const state = reactive({
      a: 1,
      b: 2
    });

    const updateA = () => {
      state.a += 1;
      state.b = state.a + 1;
    };

    return {
      state,
      updateA
    };
  }
};
</script>

总结:

  1. 直接赋值:适用于简单的数据更新。
  2. 计算属性:适用于依赖其他数据的派生数据。
  3. 侦听器:适用于需要在数据变化时执行复杂逻辑的情况。
  4. 生命周期钩子:适用于在组件生命周期的特定阶段进行数据初始化或更新。
  5. 事件处理:适用于用户交互触发的数据更新。
  6. Vuex:适用于复杂的状态管理和多个组件之间的数据共享。
  7. Ref 和 Reactive (Vue 3):适用于 Vue 3 中的响应式数据管理。

根据具体需求选择合适的方法,可以更高效地实现 data 变量之间的相互赋值和数据联动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp ,微信小程序,滚动(下滑,上拉)到底部加载下一页内容

前言 小程序的内容基本都是滑动到底部加载下一页&#xff0c;这个一般都没有什么好用的组件来用&#xff0c;我看vant和uniapp的插件里最多只有个分页&#xff0c;没有滚动到底部加载下一页。再次做个记录。 效果预览 下滑到底部若是有下一页&#xff0c;则会自动加载下一页&…

【数据分享】2024年我国省市县三级的休闲娱乐设施数量(免费获取/18类设施/Excel/Shp格式)

KTV、棋牌室、音乐厅等休闲服务设施的配置情况是一个城市公共基础设施完善程度的重要体现&#xff0c;一个城市休闲服务设施种类越丰富&#xff0c;数量越多&#xff0c;通常能表示这个城市的公共服务水平越高&#xff01; 本次我们为大家带来的是我国各省份、各地级市、各区县…

Flarum:简洁而强大的开源论坛软件

Flarum简介 Flarum是一款开源论坛软件&#xff0c;以其简洁、快速和易用性而闻名。它继承了esoTalk和FluxBB的优良传统&#xff0c;旨在提供一个不复杂、不臃肿的论坛体验。Flarum的核心优势在于&#xff1a; 快速、简单&#xff1a; Flarum使用PHP构建&#xff0c;易于部署&…

【CSS in Depth 2 精译_056】8.4 CSS 的新特性——原生嵌套(Nesting)+ 8.5 本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第三部分 现代 CSS 代码组织】 ✔️【第八章 层叠图层及其嵌套】 ✔️ 8.1 用 layer 图层来操控层叠规则&#xff08;上篇&#xff09; 8.1.1 图层的定义&#xff08;上篇&#xff09;8.1.2 图层的…

Qt字符编码

目前字符编码有以下几种&#xff1a; 1、UTF-8 UTF-8编码是Unicode字符集的一种编码方式(CEF)&#xff0c;其特点是使用变长字节数(即变长码元序列、变宽码元序列)来编码。一般是1到4个字节&#xff0c;当然&#xff0c;也可以更长。 2、UTF-16 UTF-16是Unicode字符编码五层次…

分布式事务-SpringBoot集成Seata

1.本地事务和分布式事务概念 事务四大特性 原子性&#xff1a;事务不可再分一致性&#xff1a;数据改变前后&#xff0c;总量必须一致隔离性&#xff1a;事务之间相互隔离&#xff0c;互不干扰持久性&#xff1a;事务一旦提交&#xff0c;数据就会持久化到磁盘&#xff0c;不…

win10 wsl2 install

安装 迁移 docker WSL2常用指令 在 WSL2 中推出或关闭 WSL 实例&#xff0c;可以使用以下几种方法&#xff1a; 1. 使用 exit 命令 在 WSL2 终端中&#xff0c;输入以下命令即可退出当前的 WSL 会话&#xff1a; exit2. 使用 logout 命令 你也可以使用&#xff1a; l…

「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用

自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件,鸿蒙应用能够提高代码的可维护性,并简化复杂布局的构建。本篇将介绍如何创建自定义组件,如何向组件传递数据,以及如何在不同页面间复用这些组件。 关键词 自定义组件复用组件属性传递组件通信组…

flutter 专题二 Flutter状态管理之Riverpod 0.8.4

一 、flutter 有哪些状态管理方式 Flutter的状态管理方式有很多&#xff0c;Redux、 Bloc、 MobX、Provider等等。单单一个Provider&#xff0c;我也见到了各种组合&#xff0c;例如ChangeNotifier Provider / StateNotifier Provider&#xff08; freezed&#xff09;。各…

uniapp编译多端项目App、小程序,input框键盘输入后

项目场景&#xff1a; uniapp编译后的小程序端&#xff0c;app端 在一个输入框 输入消息后&#xff0c;点击键盘上的操作按钮之后键盘不被收起&#xff0c;点击其他发送按钮时&#xff0c;键盘也不被收起。 问题描述 在编译后的app上普通的事件绑定&#xff0c;tap,click在发…

高并发编程

一台64G内存的服务器QPS可以达到9W&#xff0c;TPS&#xff08;事务&#xff09;可以达到5K&#xff0c;每个TPS大约包含18个QPS.只读的话QPS可以达到30~40万.阿里云有相关测试工具、测试方法、测试结果。 1、volatile 保证可见性&#xff0c;禁止指令重排&#xff0c;避免多线…

论文 | PROMPTAGATOR : FEW-SHOT DENSE RETRIEVAL FROM 8 EXAMPLES

1. 背景信息 在信息检索领域&#xff0c;传统的方法往往依赖于大量的标注数据来训练模型&#xff0c;以便在各种任务中表现良好。然而&#xff0c;许多实际应用中的监督数据是有限的&#xff0c;尤其是在不同的检索任务中。最近的研究开始关注如何从一个拥有丰富监督数据的任务…

群控系统服务端开发模式-应用开发-上传工厂开发

现在的文件、图片等上传基本都在使用oss存储。而现在常用的oss存储有阿里云、腾讯云、七牛云、华为云等&#xff0c;但是用的最多的还是前三种。而我主要封装的是本地存储、阿里云存储、腾讯云存储、七牛云存储。废话不多说&#xff0c;直接上传设计图及说明&#xff0c;就一目…

STM32之串口字库更新

1.串口通讯介绍 串口通讯&#xff08;Serial Communications&#xff09;是一种通过串口进行数据传输的通讯方式&#xff0c;通过串行口每次传输一个字节的数据&#xff0c;按照约定的协议进行数据的传输和接收。串口通讯的原理是利用串行口的发送和接收线路&#xff0c;将需要…

立刻解决 gcc: error: unrecognized argument in option ‘-mabi=aapcs-linux’

unrecognized argument in option ‘-mabiaapcs-linux’ Linux 主线支持的硬件较少&#xff0c;一般是第三方开源&#xff08; Linaro/Yocto &#xff09;或者硬件厂商提供定制的嵌入式 Linux 如果确认主线支持自己的硬件&#xff0c;可以从 https://www.kernel.org/ 获取指定…

法律智能助手:开源NLP系统助力法律文件高效审查与检索

一、系统概述 思通数科AI平台是一款融合了自然语言处理和多标签分类技术的开源智能文档分类工具&#xff0c;特别适用于法律行业。平台采用深度学习的BERT模型来进行特征提取与关系抽取&#xff0c;实现了精准的文档分类和检索。用户可以在线训练和标注数据&#xff0c;使系统…

ChatGPT新体验:AI搜索功能与订阅支付指南

就在凌晨&#xff0c;在ChatGPT迎来两周岁生日之际&#xff0c;OpenAI重磅发布了ChatGPT的全新人工智能搜索体验。 期待已久的时刻终于到来&#xff0c; ChatGPT正式转型成为一款革命性的AI搜索引擎! 先来看看ChatGPT搜索&#xff1a;这次不是简单的加个搜索框&#xff0c;而…

【零售和消费品&家居用品】家庭门窗开闭状态安全监控系统源码&数据集全套:改进yolo11-DCNV2

改进yolo11-GhostDynamicConv等200全套创新点大全&#xff1a;家庭门窗开闭状态安全监控系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.01 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”…

合并区间 leetcode56

合并区间leetcode 目录一、题目二、踩坑过程三、上官方解答四、含泪体会彩蛋 目录 一、题目 二、踩坑过程 一开始想使用一个数组来标记区间&#xff0c;但是仔细想不好实现&#xff0c;单纯把区间里出现的设置为1&#xff0c;不好体现重叠的概念&#xff0c;如果使用三种状态…

【Linux】- 权限

目录 一、Linux常用热键 &#xff08;1&#xff09;、history&#xff1a; &#xff08;2&#xff09;、单击tab键 / 双击tab键 &#xff08;3&#xff09;、快捷键ctrl c 和 ctrl d 二、关机指令 shutdown 三、window与linux互传文件 四、不同linux系统间互传文件 …