react子组件向父组件传递数据和父组件向子组件传递数据的正确写法和函数互相调用

news/2024/12/2 14:38:14/

存在伪代码,自行解决

父组件 App:

import React, { useState, useEffect } from 'react';
import { Col, Row, Space, Table, Switch, Tag, Button } from 'antd';
import Qs from 'qs';const App: React.FC = () => {//父组件传数据到子组件函数const [opne, setOpen] = useState<boolean>(false);const tj1 = () => {setOpen(true)console.log("添加",opne);}// 子组件向父组件传递数据的回调函数const handleChildDataChange = (data: string) => {console.log('子组件传递的数据:', data);};return (<>{/* 父组件内容 */}<Button onClick={tj1 }>Send Data to Parent</Button>{/* 将回调函数传递给子组件 */}<USERTJ message={opne} onChildDataChange={handleChildDataChange} /></>);
};
export default App;

子组件 USERTJ:

import React, { useState } from 'react';
import { Button, Modal } from 'antd';
//定义类型
interface ChildProps {message: boolean,onChildDataChange: (data: string) => void;
}const USERTJ: React.FC<ChildProps> = ({ message, onChildDataChange }) => {console.log('来自父组件来的数据', message);// 子组件向父组件传递数据const handleInputChange = () => {onChildDataChange('Data from child component');};return (<>{/* 子组件内容 */}<Button onClick={handleInputChange}>Send Data</Button></>);
};export default USERTJ;

子组件和父组件的函数互相调用

父组件:

import React, { useRef, useState, useEffect } from 'react';
import { Col, Row, Space, Table, Switch, Tag, Button } from 'antd';
import type { ColumnsType } from 'antd/es/table';
import { getDateFormatt } from "@/util/date"import Qs from 'qs'
//查询用户列表
import { SysUser } from "@/request/api"
import "./user.less"
import USERTJ, { ChildComponentRef } from "@/components/user"const App: React.FC = () => {const childRef = useRef<ChildComponentRef>(null);// 子组件向父组件传递数据的回调函数const handleChildDataChange = (data: string) => {console.log('子组件传递的数据:', data);};//调用子组件的函数const tychildFunction= (data: string) => {if (childRef.current) {childRef.current.childFunction(); // 调用子组件的函数}};return (<><Button type="primary" onClick={tychildFunction}>调用子组件</Button>{/* 弹窗 */}{/* 将回调函数传递给子组件 */}<USERTJ ref={childRef} onChildDataChange={handleChildDataChange} /></>)};
export default App;

子组件

import React, { useState, forwardRef, useImperativeHandle, ForwardedRef } from 'react';
import { Button, Modal } from 'antd';
interface ChildProps {// 定义子组件的其他属性onChildDataChange: (data: string) => void;}
export interface ChildComponentRef {childFunction: () => void;
}const USERTJ = forwardRef<ChildComponentRef, ChildProps>((props, ref: ForwardedRef<ChildComponentRef> ) => {//从props取出父组件的onChildDataChange 函数,让子组件调用const { onChildDataChange } = props;const handleInputChange = () => {// 子组件向父组件传递数据onChildDataChange('Data from child component');};const childFunction = () => {console.log('子组件函数被调用');};// 将子组件的函数暴露给父组件通过 ref 获取useImperativeHandle(ref, () => ({childFunction,}));return (<><Button type="primary" onClick={handleInputChange}>调用父组件</Button></>);
});
export default USERTJ;

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

相关文章

安卓应用开发 MyWeChat(一)

安卓应用开发 MyWeChat&#xff08;一&#xff09; 项目gitee仓库实现MyWeChat初步静态界面静态界面首部&#xff08;top&#xff09;静态界面底部&#xff08;bottom&#xff09;静态界面中部&#xff08;fragment&#xff09;综合整理静态界面 实现MyWeChat界面初步的显示与跳…

Python函数定义的高级用法

函数定义时的几类常见参数&#xff1a; 1、默认参数 看如下代码 def stu_register(name,age,country,course): print("----注册学⽣生信息------") print("姓名:",name)print("age:",age) print("国籍:",country) print("课程…

weblogic12 最低java,weblogic12c配置

1.1准备工作&#xff1a; 1.1.1检查系统是否安装JDK I.检查命令为&#xff1a; echo $JAVA_HOME 如果返回结果为空&#xff0c;说明没有当前系统没有安装JDK&#xff0c;需要安装JDK&#xff0c;需要下载JDK安装文件 II.下载JDK安装文件&#xff1a; III.安装JDK&#xff1a;…

stm32控制esp8266的实现STA/AP/STa+AP程序

一、引脚定义 ATK-MW8266D模块的各个引脚的详细描述&#xff0c;如下表所示 一、功能说明 ATK-MW8266D模块支持三种工作模式&#xff0c;分别为&#xff1a;STA、AP、STAAP。 STA模式 在此模式下&#xff0c;ATK-MW8266D模块可连接其他设备提供的无线网络&#xff0c;例如通…

linux下weblogic开机自启动,centos安装weblogic,并添加服务自启动

1.1 准备工作&#xff1a; 1.1.1 检查系统是否安装JDK I. 检查命令为&#xff1a;echo $JAVA_HOME 如果返回结果为空&#xff0c;说明没有当前系统没有安装JDK&#xff0c;需要安装JDK&#xff0c;需要下载JDK安装文件 II. 下载JDK安装文件&#xff1a; 下载文件&#xff1a;…

[Android实例] android注册 登录+修改帐号密码+添加资料+给指定帐号充值 .....

有图有真相&#xff1a; 我们首先看注册那边返回的JSON都是什么内容吧&#xff08;一会我会讲到如何抓到result>1的错误信息&#xff0c;然后返回给activity显示出来&#xff09; 一般你们公司都会有个后台给你们写个接口文档扔给你 让你去做的 [mw_shl_codejava,true]{ “…

新增linux用户,linux 手动新增用户

手动新增用户 需要了解下面这些文件及目录&#xff1a; 用户账号与密码参数方面的文件&#xff1a;/etc/passwd,/etc/shadow 用户组相关方面文件&#xff1a;/etc/group,/etc/gshadow 用户的组文件夹&#xff1a;/home/账号名称 /etc/default/useradd /etc/skel/* /etc/login.d…

初始化一个新的cURL辉煌并抓取一个web页面。

(PHP 4 > 4.0.2, PHP 5, PHP 7) curl_setopt — 设置一个cURL传输选项 说明 bool curl_setopt ( resource $ch , int $option , mixed $value ) 为给定的cURL会话句柄设置一个选项。 参数 ch 由 curl_init() 返回的 cURL 句柄。 option 需要设置的CURLOPT_XXX选项。 val…