首页 > 其他分享 >前端父子组件间事件互调

前端父子组件间事件互调

时间:2022-10-18 18:36:37浏览次数:58  
标签:const 前端 childClick 点击 事件 互调 组件 ref

React Hooks实现

子调父的事件,子组件中通过props接受父组件传递过来的事件,子组件中触发时调用事件

父调子的事件,子组件中接受父组件的ref,并且通过useImperativeHandle给ref绑定事件,父组件中通过ref.current调用子组件中事件

import React, { useCallback, useRef, useImperativeHandle } from 'react';

const Child = ({ click, pRef }) => {
  //pRef就是父组件传过来的ref
  useImperativeHandle(pRef, () => ({
    childClick: () => {
      console.log('子组件点击事件');
    },
  }));

  return <button onClick={click}>点击</button>;
};

const Parent = () => {
  const ref = useRef();

  const parentClick = useCallback(() => {
    console.log('父组件点击事件');
  }, []);

  const onClick = useCallback(() => {
    ref.current.childClick();
  }, []);

  return (
    <div>
      <Child click={parentClick} pRef={ref} />
      <button onClick={onClick}>点击</button>
    </div>
  );
};

export default Parent;

 

Vue3 Composition Api实现

子调父的事件,子组件通过defineEmits声明事件,父组件中@该事件,并赋予父组件中事件。子组件中触发时调用事件

父调子的事件,子组件通过defineExpose暴露内部事件,父组件声明ref,使用ref.value调用子组件中事件

<template>
  <button @click="onClick">点击</button>
</template>

<script setup>
import { defineEmits, defineExpose } from "vue";

const emit = defineEmits(["myClick"]);

const onClick = () => {
  emit("myClick");
};

const childClick = () => {
  console.log("子组件点击事件");
};

defineExpose({ childClick });
</script>

<style lang="less" scoped></style>
<template>
  <div>
    <Child @myClick="parentClick" ref="cRef" />
    <button @click="onClick">点击</button>
  </div>
</template>

<script setup>
import { reactive, ref } from "vue";
import Child from "./Child.vue";

const cRef = ref();

const parentClick = () => {
  console.log("父组件点击事件");
};

const onClick = () => {
  cRef.value.childClick();
};
</script>

<style lang="less" scoped></style>

 

标签:const,前端,childClick,点击,事件,互调,组件,ref
From: https://www.cnblogs.com/shi2310/p/16803602.html

相关文章

  • 封装一个通用的根据不同数据源渲染不同Echarts效果图的组件
    CommonEcharts.vue<!--CommonEcharts.vue--><template><divref="echartsDom":style="{width,height}"></div></template><scriptlang="ts">import{ref,......
  • drf之请求与响应、drf之视图组件、2个视图基类
    drf之请求与响应Requestfromrest_framework.requestimportRequestdef__init__(self,request,parsers=None,authenticators=None,negotiat......
  • 2018 最值得关注的前端技术
    1.前言2017悄然过去,2018已经来到。人在进步,技术在发展。2018年前端有哪些领域,技术值得关注,哪些技术会兴起,哪些技术会没落。下面就我个人的判断进行一个预测判断,希望能对大家......
  • React组件通信
    react因为组件化,使得组件间通信十分的重要。本文就来简单介绍一些常见的react组件间传递的内容。我将归纳为以下几种关系来详述:父组件与子组件之间,子组件与父组件之间,发......
  • 前端知识体系整理(不断更新)
    前端知识体系整理(不断更新)——人脑不是机器,记忆都会退化,我们需要文档辅助作知识沉淀javascript基本功语言特性数据类型:​​Undefined​​​,​​​Null​​​,​​​Bollean......
  • 细说React组件性能优化
    React组件性能优化最佳实践React组件性能优化的核心是减少渲染真实DOM节点的频率,减少VirtualDOM比对的频率。如果子组件未发生数据改变不渲染子组件。组件卸载前......
  • 在Vue项目中使用Echarts : Echarts中的常用组件--堆叠面积图
    一、安装并全局引入1、通过npm获取echartsnpminstallecharts--save2、在main.js中添加下面两行代码在main.js中引入5.0以下版本 importechartsfrom'echar......
  • React组件设计模式-纯组件,函数组件,高阶组件
    一、组件(1)函数组件如果你想写的组件只包含一个render方法,并且不包含state,那么使用函数组件就会更简单。我们不需要定义一个继承于React.Component的类,我们可以定......
  • ImageList组件
    ImageList组件只有属性,没有事件常用属性:Images,ImageSizeImages的方法:Add(Image/Icon)Add(string,Image/Icon)Contains(Image/Icon)IndexOf(Image/Icon)Remove(Image......
  • 什么是前端
    前端即网站前台部分,运行在PC端,移动端等浏览器上展现给用户浏览的网页。随着互联网技术的发展,HTML5,CSS3,前端框架的应用,跨平台响应式网页设计能够适应各种屏幕分辨率,合适的动......