当前位置: 首页 > news >正文

【REACT18.x】CRA+TS+ANTD5.X实现useImperativeHandle让父组件修改子组件的数据

本实例主要是记录useRef在自定义组件上面的使用方法,包括子组件暴漏方法或属性给父组件,forwardRef useImperativeHandle等的实战

实现效果

请添加图片描述

代码实现

  • 父组件
import React, { useRef } from 'react'
import UseRefCustomChildDemo, { UseRefCustomChildDemoRef } from './UseRefCustomChildDemo'
import { Button, Flex, Space } from 'antd'
function UseRefCustomDemo() {const useChildRef = useRef<UseRefCustomChildDemoRef>(null)return (<div><h2>UseRefCustomDemo</h2><hr /><Space direction='vertical'><UseRefCustomChildDemo ref={useChildRef} username='zs' /><Flex justify='center' gap={'20px'}><ButtononClick={() => {console.log(useChildRef)useChildRef.current?.handleFocus()}}>获取焦点</Button><Buttontype='primary'onClick={() => {useChildRef.current?.handleSelect()}}>选中文字</Button><Buttontype='primary'dangeronClick={() => {useChildRef.current?.handleClick()}}>修改信息</Button></Flex></Space></div>)
}
export default UseRefCustomDemo
  • 子组件
import { Flex } from 'antd'
import React, { forwardRef, ReactNode, useImperativeHandle, useRef } from 'react'
import { useImmer } from 'use-immer'type Props = { children?: ReactNode; username: string }export interface UseRefCustomChildDemoRef {handleFocus: () => voidhandleSelect: () => voidhandleClick: () => void
}const UseRefCustomChildDemo = forwardRef<UseRefCustomChildDemoRef, Props>((props, ref) => {const { username } = propsconst [userInfo, setUserInfo] = useImmer({name: 'lisi',age: 18})function handleClick(): void {setUserInfo(draft => {draft.age += 1})}const inputRef = useRef<HTMLInputElement>(null)useImperativeHandle(ref, () => {return {handleFocus() {inputRef.current!.focus()},handleSelect() {inputRef.current?.select()},handleClick() {handleClick()}}}, [])return (<div><p>姓名:{username ? username : userInfo.name}</p><p>年龄:{userInfo.age}</p><Flex justify='center' gap={'20px'}><input type='text' ref={inputRef} /><button onClick={handleClick}>修改年龄</button></Flex></div>)
})
UseRefCustomChildDemo.displayName = 'UseRefCustomChildDemo'export default UseRefCustomChildDemo
http://www.dtcms.com/a/296390.html

相关文章:

  • R study notes[1]
  • linux入门 相关linux系统操作命令(二)--文件管理系统 ubuntu22.04
  • 二分查找-153-寻找旋转排序数组中的最小值-力扣(LeetCode)
  • unordered_map和unordered_set特性以及解决哈希冲突
  • Gemini拿下IMO2025金牌的提示词解析
  • Redis Lua脚本语法详解
  • Redis ①⑦-分布式锁
  • 跨模态理解的基石:非文本内容向量化方法全景解析
  • Lua协同程序(coroutine)
  • leetcode100.相同的树(递归练习题)
  • Xilinx-FPGA-PCIe-XDMA 驱动内核兼容性问题修复方案
  • 基于单片机睡眠质量/睡眠枕头设计
  • 1.1.2 建筑构造要求
  • 无人机正摄影像自动识别与矢量提取系统
  • 用phpEnv安装Thinkphp8.x出错调试全过程记录
  • C++ 中打开文件的多种方式及相关流类
  • matplotlib的详细知识点
  • k8s之ingress定义https访问方式
  • 【AI News | 20250723】每日AI进展
  • Windows11 本地安装docker Desktop 部署dify 拉取镜像报错
  • iOS Core Data 本地数据库 使用详解:从模型关系到数据操作
  • 技嘉z370主板开启vtx
  • 谈谈ArrayList与Vector的理解?
  • SpringBoot+AI+Web3实战指南
  • Python循环结构
  • 红黑树:高效平衡的终极指南
  • c语言学习(dyas10)
  • Kubernetes Kubelet 资源配置优化指南:从命令行参数到配置文件的最佳实践
  • Spring AI - ChatModel接口演示
  • TCO,UDP考点