react中父组件如何直接调用子组件的方法和属性,以及对比vue3.0父组件调用子组件的方法和属性

news/2024/11/29 3:55:20/

react中父组件如何直接调用子组件的方法和属性,以及对比vue3.0父组件调用子组件的方法和属性

    • react hook
    • vue setup
      • 父组件
      • 子组件

react hook

forwardRef(render)
useImperativeHandle(ref, createHandle, dependencies?)

import {forwardRef,useEffect,useImperativeHandle,useRef,useState,
} from "react";const ChildrenComponents = forwardRef(function ChildrenComponents(props, ref) {//useImperativeHandle类似于vue3.0的defineExpose,把子组件中要暴漏给父组件属性或方法,以对象的方式抛出去useImperativeHandle(ref,() => {return {initList,exposeParamter() {return {defaultTitleRef,};},defaultTitleRef,name,list,};},[]);const defaultTitleRef = "我是子组件";let [name, setName] = useState("工藤新一");let [list, setList] = useState([{name: "工藤新一",sex: "男",},{name: "毛利兰",sex: "女",},]);//初始化function initList() {console.log("[初始化子组件数据]");}function sendMessage() {// 类似于vue3.0的defineEmitsprops.click("点击子组件给父组件传值");}useEffect(() => {console.log("[useEffect-子组件]", props);}, []);return (<><p>我是子组件:{name}</p><br /><span onClick={sendMessage}>点击子组件给父组件传值</span></>);
});function Forward() {const childrenRef = useRef(null);let [title, setTitle] = useState("我想操作子组件的方法和属性");let [defaultName, setDefaultName] = useState("");let [list, setList] = useState([]);function getMessageHandle(params) {console.log("[我接收了子组件的传值]", params);console.log(childrenRef.current.list);}useEffect(() => {console.log("[useEffect-父组件如何直接调用子组件的方法和属性]");childrenRef.current.initList();console.log("", childrenRef.current.exposeParamter().defaultTitleRef);console.log("[name]", childrenRef.current.name);setDefaultName(childrenRef.current.defaultTitleRef);setList(childrenRef.current.list);}, []);return (<><p>forwardRef:我是父组件</p><p>{defaultName}</p>{/* react通过标签的属性传值 */}<ChildrenComponentsref={childrenRef}title={title}click={getMessageHandle}/>{list.map((item, index) => {return (<p key={index}>{item.name}-{item.sex}</p>);})}</>);
}export default Forward;

vue setup

父组件

<template><div>组件</div><button @click="getHandle">ok</button><ChildrenComponent :title="title" :paramsObject="paramsObject" ref="childrenRef" @clickHandle="operateHandle" />{{paramsObject.name}}
</template><script setup>import {onMounted,ref} from "vue";import ChildrenComponent from "../components/children.vue";let title = ref("组件传值");const childrenRef = ref(null)onMounted(() => {childrenRef.value.initFunction();console.log("[父组件]", childrenRef.value.defaultTitle)})let paramsObject = ref({name: "父组件",age: 29,sex: '男'})function getHandle() {}function operateHandle(params) {console.log("[params]", params)paramsObject.value.name = params.name;console.log("[paramsObject]", paramsObject)}
</script><style>
</style>

子组件

<template><div>我还是个孩子</div><h1>{{props.title}}</h1><button @click="btnHandle">点击按钮</button>
</template><script setup>import {defineProps,defineExpose,defineEmits,ref} from "vue";const props = defineProps({title: {type: String,default: () => {return ''}},paramsObject: {type: Object,default: () => {return {}}}});const emits = defineEmits(["clickHandle"]);console.log("[children]", props.paramsObject)function initFunction() {console.log("[初始化]")}function btnHandle() {console.log("[ok]")emits("clickHandle", {name: '毛利兰'})}let defaultTitle = ref("我是子组件")defineExpose({initFunction,defaultTitle})
</script><style lang="scss" scoped>
</style>

http://www.ppmy.cn/news/624857.html

相关文章

可视化大屏开发适配(二)

这是前一篇 “可视化大屏开发适配“ 文中提到的第二种transform:scale方法实现的大屏开发&#xff0c;在这分享给大家&#xff1b;至此 可视化大屏开发相对好用的两种方法都介绍完啦 【前端大屏实战1】VueEcharts-- 大屏自适应缩放解决方案 > 使用transform:scale &#xff…

变压器的试验原理及方法

规程规定它是变压器大修时、无载开关调级后、变压器出口短路后和3~5年1次等必试项目。 在变压器的所有试验项目中是一项较为方便而有效的考核绕组纵绝缘和电流回路连接状况的试验。它能够反映绕组匝间短路、绕组断股、分接开关接触状态以及导线电阻的差异和接头接触不良等缺陷…

计算机网络期末复习速通--不挂科版

计算机网络 文章目录 计算机网络第一章 概述1.1计算机网络在信息时代中的作用1.2互联网概述1.3互联网的组成1.3.1 互联网的边缘部分1.3.2 互联网的核心部分 1.5计算机网络的类别1.5.1计算机网络的定义 1.6计算机网络的性能1.7计算机网络结构体系1.7.1计算机网络体系结构&#x…

双轮载人平衡车设计完整教程之调校测试篇

双轮载人平衡车设计完整教程之调校测试篇 实验及路测结果 6.1 硬件测试 6.1.1车体与元件安装 车体采用的是精钢打造的船型包厢&#xff0c;车体机械部分的安装及重量分布&#xff0c;直接影响到小车的平衡性能。拿起螺丝准备安装的一刻&#xff0c;瞬间傻眼了&#xff0c;全是…

NEFU ERP 企业资源计划[1] 详细知识点

NEFU ERP 企业资源计划[1] 详细知识点 ERP 企业资源管理计划第 0 章 术语第 1 章 ERP 概述1、什么是 ERP2、ERP 目的3、ERP 应用 第 2 章 ERP 理论与发展1、ERP 发展概述订货点法物料需求计划 MRP&#xff08;时段 MRP、基本 MRP)闭环 MRPMRP II&#xff08;制造资源计划&#…

硬件基础元器件知识

硬件基础元器件知识与选型 1 三极管1.1三极管概述1.2三极管原理1.3 三极管分辨方法1.4 三极管分类及选型1.41三极管类型1.42三极管选型 2 电阻2.1电阻概述2.2电阻分类及选型种类&#xff1a;2.21电阻读取方法1.42电阻选型1.43电阻应用 3 电容3.1电容概述3.2 电容原理3.3电容使用…

TVS和ESD那些事儿

公号阅读更加精彩&#xff1a;《TVS和ESD那些事儿》 ​一、过压脉冲及标准 过压脉冲如ESD和浪涌会对半导体器件产生不利影响&#xff0c;如导致绝缘击穿、功能停止或元件劣化。 现在对于过压脉冲称呼可能比较笼统了&#xff0c;实际上可以按照电压脉冲产生原因进行分类&…

电路方案分析(十三)采用 CAN 的汽车分立式 SBC 预升压、后降压参考设计方案

采用 CAN 的汽车分立式 SBC 预升压、后降压参考设计方案 tips&#xff1a;TI设计方案参考分析&#xff1a;TI Designs&#xff1a;TIDA-01429 SBC:系统基础芯片. 详细参见&#xff1a;https://mxioum.blog.csdn.net/article/details/121731100 SBC是一种集成电路&#xff08;…