react和vue2/3父子组件的双向绑定(sync、emit、v-model)

目录

Vue

.sync(2.3.0+)

$emit (2.3后)

自定义组件的 v-model 2.2.0+

v-model+emits(3.0取消了.sync)

React

父组件回调函数

相关基础

框架

MVC (Model View Controller)/MVP(Model View Presenter)

MVVM (Model View View Model)

React和Vue区别


Vue

.sync(2.3.0+

//父组件
<template>
    <TestCom :num.sync="data"></TestCom>
</template>
<script>
export default({
  components: {
    TestCom,
  },
  data() {
    return {
      data:2
    }  
  },
});
</script>


//子组件
<template>
  <div>
    <button @click="cahngeNum">按钮</button>
    {{ num }}
  </div>
</template>

<script>
export default({
  props: {
    num: {
      default: "",
      type: String,
    },
  },
  methods: {
    cahngeNum() {
      this.$emit("update:num", 999); // 触发update:data将子组件值传递给父组件
    },
  },
});
</script>

$emit (2.3后)

<template>
  <div>
    <!-- 子组件模板 -->
    <button @click="updateVisibility">Toggle Visibility</button>
  </div>
</template>

<script>
export default {
  methods: {
    updateVisibility() {
      const newVisibility = !this.visibility;
      this.$emit('visibility-change', newVisibility);
    }
  },
  props: ['visibility']
};
</script>
<template>
  <div>
    <!-- 父组件模板 -->
    <child-component :visibility="visibility" @visibility-change="handleVisibilityChange" />
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      visibility: false
    };
  },
  methods: {
    handleVisibilityChange(newVisibility) {
      this.visibility = newVisibility;
    }
  }
};
</script>

自定义组件的 v-model 2.2.0+

<input v-model="searchText">
语法糖 等价于:
<input
  :value="searchText"
  @input="searchText = $event.target.value"
>
<template>
  <div>
    <label for="message">Message:</label>
    <input type="text" id="message" v-model="userMessage" />
    <p>Entered message: {{ userMessage }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      userMessage: '' // 初始值为空
    };
  }
};
</script>

当用户在输入框中输入文本时,userMessage 的值会实时更新,

并且当 userMessage 的值改变时,输入框中的值也会自动更新。

v-model 在内部相当于使用 :value @input 来实现数据的绑定监听

v-model+emits(3.0取消了.sync)

// 父组件
<template>
    <div>
        // 父组件传递给子组件num属性(默认使用modelValue)
        <child v-model:num = data></child>
    </div>
</template>
<script>
    data(){
      return {
        data:'我是来自父组件的数据'
      }
    }
</script>


//子组件
<template>
  <div>
    <button @click="cahngeNum">按钮</button>
    {{ num }}
  </div>
</template>

<script lang="ts">
import { defineComponent } from "vue";
export default defineComponent({
  emits: ["update:num"],
  props: {
    num: {
      default: "",
      type: String,
    },
  },
  setup(props, { emit }) {
    function cahngeNum() {
      emit("update:num", 999); 
    }
    return { cahngeNum };
  },
});
</script>

React

父组件回调函数

import React, { useState } from 'react';

function ParentComponent() {
  const [visibility, setVisibility] = useState(false);

  // 父组件中的回调函数,用于接收子组件传递的更新数据
  const handleVisibilityChange = (newVisibility) => {
    setVisibility(newVisibility);
  };

  return (
    <div>
      {/* 将属性和回调函数传递给子组件 */}
      <ChildComponent visibility={visibility} onVisibilityChange={handleVisibilityChange} />
    </div>
  );
}
import React from 'react';

function ChildComponent({ visibility, onVisibilityChange }) {
  // 子组件中的事件处理函数,用于更新属性并调用回调函数
  const handleVisibilityToggle = () => {
    const newVisibility = !visibility;
    onVisibilityChange(newVisibility);
  };

  return (
    <div>
      {/* 子组件根据需要使用属性 */}
      <button onClick={handleVisibilityToggle}>Toggle Visibility</button>
    </div>
  );
}

vue父子组件之间双向数据绑定的(vue2/vue3)_vue3父子组件双向绑定_前端一枚的博客-CSDN博客

相关基础

框架

MVC (Model View Controller)/MVP(Model View Presenter)

  • Model(模型):提供数据
  • View(视图):显示数据
  • Controller/Presenter(控制器):负责逻辑的处理,

MVVM (Model View View Model)

视图业务逻辑分开。

ViewModel 是它们双向绑定的桥梁,自动同步更新

【优点】

相比mvp各层的耦合度更低,一个viewmodel层可以给多个view层共用(一对多),提高代码的可重用性

*耦合度:模块间依赖的程度。

【缺点】

因为使用了dataBinding,增加了大量的内存开销,增加了程序的编译时间,所以适合轻量级项目。

数据绑定使得 Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题

React和Vue区别

React和Vue都用了MVVM,父组件传给子组件的props都不允许子组件修改

React单向数据流:只能由数据层的变化去影响视图层的变化

但Vue提供了双向数据绑定的语法糖($emit,v-model)

在文档中经常会使用 vm (ViewModel 的缩写) 这个变量名表示组件实例

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RHCSA——Linux网络、磁盘及软件包管理

ZY目录 Linux操作系统讲解&#xff1a;一、网络管理1、NetworkManager1.1、nmtui界面&#xff1a;1.2、nmcli使用方法&#xff1a; 2、配置网络2.1、网络接口以及网络连接2.2、配置方法&#xff1a;2.3、ping命令&#xff1a;2.4、wget命令 二、磁盘管理2.1、分区得两种格式2.1…

日撸java三百行day77-79

文章目录 说明GUI1. GUI 总体布局2. GUI 代码理解2.1 对话框相关控件2.1.1 ApplicationShowdown.java&#xff08;关闭应用程序&#xff09;2.1.2 DialogCloser.java&#xff08;关闭对话框&#xff09;2.1.3 ErrorDialog.java&#xff08;显示错误信息&#xff09;2.1.4 HelpD…

day35-Postman/ajax

0目录 1.postman 2.ajax 1.Postman 1.1 定义&#xff1a;postman用于测试http协议接口&#xff0c;无论是开发还是测试人员 1.2 Servlet中的doGet&#xff08;&#xff09;/doPost…

idea 常用快捷键总结

IDEA常用快捷键总结 很多新手小白在使用IDEA进行代码编写的时候 对快捷键很感兴趣 这里泡泡给大家总结了一些常用的快捷键 希望能帮助到你 记得要收藏下来时常观看并且练习&#xff0c;才能熟练哦~ 1. 根据psvm或者main快速生成主函数 我们可以在类中输入psvm 或者main 然后I…

C# Winfrom将DataGridView数据导入Excel

1.项目添加Word和Excel的COM类型库引用 2.创建Excel工作表 //定义Excel操作对象Microsoft.Office.Interop.Excel.Application excelApp new Microsoft.Office.Interop.Excel.Application();//定义Excel工作表Microsoft.Office.Interop.Excel.Worksheet worksheet excelApp.Wo…

TCP的窗口控制和重发控制【TCP原理(笔记三)】

文章目录 利用窗口控制提高速度窗口控制与重发控制确认应答未能返回的情况某个报文段丢失的情况 控制流 利用窗口控制提高速度 TCP以1个段为单位&#xff0c;每发一个段进行一次确认应答的处理&#xff0c;如图。这样的传输方式有一个缺点。那就是&#xff0c;包的往返时间越长…

Centos使用docker部署nacos

Centos使用docker部署nacos 对于使用Docker部署Nacos&#xff0c;您可以按照以下步骤进行操作&#xff1a; 在您的服务器上安装Docker和Docker Compose。创建一个用于存储Nacos数据的目录&#xff0c;例如/path/to/nacos/data。创建一个docker-compose.yml文件&#xff0c;并…

心电前置放大电路制作与原理详细分析(附电路板实物图)

心电前置放大电路制作与原理详细分析(附电路板实物图) 实验目的实验结果实验电路图原理解释与计算实验测试过程实验参数测量实验洞洞板焊接实验目的 心电信号具有微弱、低频、和高阻抗等特性,极其容易受到干扰。为了实现心电信号的放大,前置放大器需要满足高输入阻抗、高共…

前端开发如何更好的避免样式冲突?级联层(CSS@layer)

目录 前言 一、什么是级联层 (Cascade Layers)&#xff1f; 1.1 级联层的官方定义 1.2 级联层为了解决什么问题&#xff1f; 二、理解级联层的前提 —— 级联 (cascade) 2.1 什么是级联&#xff1f; 2.2 当前级联的排序标准 2.3 级联起源&#xff08;Cascading Origins…

Spring Boot进阶(54):Windows 平台安装 MongoDB数据库 | 超级详细,建议收藏

1. 前言&#x1f525; Windows如何安装MongoDB数据库及使用呢&#xff1f;这将又会是干货满满的一期&#xff0c;全程无尿点不废话只抓重点教&#xff0c;具有非常好的学习效果&#xff0c;拿好小板凳准备就坐&#xff01;希望学习的过程中大家认真听好好学&#xff0c;学习的途…

第二章:在html中使用javascript

1、在html页面中插入js的主要方法就是使用<script>元素 2、html4.01为<script>定义了以下6个属性&#xff1a;【language已经废弃&#xff0c;其他5个属性都是可选的】 async 表示应该立即下载脚本&#xff0c;但不应该妨碍页面中的其他操作&#xff0c;比如下载…

中金:龙湖基本面稳健,股价超跌具备配置价值

恒大2.4万亿元的天量债务爆出后&#xff0c;让本就信心不足的房地产行业&#xff0c;越发雪上加霜&#xff0c;房企股价遭遇集体下挫&#xff0c;业内公认的万科、龙湖、保利、中海等“优等生”也不免被波及。多家证券机构提醒&#xff0c;行业预期降至冰点的情况下&#xff0c…

预付费电表收费系统

预付费电表收费系统是一种先进的电表管理系统&#xff0c;它能够帮助电力公司更加高效地管理电表收费&#xff0c;提高用电效率&#xff0c;降低能源浪费。本文将从以下几个方面介绍预付费电表收费系统的特点和优势。 一、预付费电表收费系统的原理 预付费电表收费系统是指用户…

京东自动化功能之商品信息监控是否有库存

这里有两个参数,分别是area和skuids area是地区编码,我这里统计了全国各个区县的area编码,用户可以根据实际地址进行构造skuids是商品的信息ID填写好这两个商品之后,会显示两种状态,判断有货或者无货状态,详情如下图所示 简单编写下python代码,比如我们的地址是北京市…

2023无监督摘要顶会论文合集

2023无监督摘要顶会论文合集 写在最前面ACL-2023Aspect-aware Unsupervised Extractive Opinion Summarization 面向的无监督意见摘要&#xff08;没找到&#xff09;Unsupervised Extractive Summarization of Emotion Triggers *情绪触发(原因)的 *无监督 *抽取式 摘要&#…

postgresql 内核源码分析 表锁relation lock的使用,session lock会话锁的应用场景,操作表不再困难

​专栏内容&#xff1a; postgresql内核源码分析 手写数据库toadb 并发编程 个人主页&#xff1a;我的主页 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 表锁介绍 当表打开&#xff0c;或者操作表时&#xff0c;都需要…

CDA数据分析系01 anaconda

简介 数据处理集成包&#xff0c;不局限于python 创建一个新的environment conda create --name python34 python3.4 激活一个environment activate python34 # for windows conda的package管理 类似pip&#xff0c;conda install xxxx 查看已安装的python包 conda list…

【计算机视觉】DINOv2(视觉大模型)代码四个不同模型的对比,以 28 * 28 的图像为例(完整的源代码)

文章目录 一、ViT-S/14二、ViT-B/14三、ViT-L/14四、ViT-g/14 一、ViT-S/14 import torch import torchvision.transforms as T import matplotlib.pyplot as plt import numpy as np import matplotlib.image as mpimg from PIL import Image from sklearn.decomposition im…

opencv 05 彩色RGB像素值操作

opencv 05 彩色RGB像素值操作 RGB 模式的彩色图像在读入 OpenCV 内进行处理时&#xff0c;会按照行方向依次读取该 RGB 图像的 B 通道、G 通道、R 通道的像素点&#xff0c;并将像素点以行为单位存储在 ndarray 的列中。例如&#xff0c; 有一幅大小为 R 行C 列的原始 RGB 图像…

React和Vue生命周期、渲染顺序

主要就是命名不同 目录 React 组件挂载 挂载前constructor() 挂载时render() 挂载后componentDidMount()&#xff1a;初始化节点 更新 更新时render()&#xff1a;prop/state改变 更新后componentDidUpdate() 卸载 卸载前componentWillUnmount()&#xff1a;清理 V…