当前位置: 首页 > 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.lryc.cn/news/597901.html

相关文章:

  • 赋能决策与创新的数据引擎:数据分析平台的价值与未来
  • 增强LLM最后隐藏层的意义与效果
  • 使用 MobaXterm 登录你的阿里云 ECS 实例
  • 常用的Typescript特性
  • python---元组(Tuple)
  • M3066ANL网络变压器,常用于NEC方案机顶盒等网络设备M3066AN实现网络信号的稳定传输与电气隔离保护
  • day 33打卡
  • 傅里叶转换(机器视觉方向)
  • 从 Shell 脚本到 Go 应用:使用 Kiro AI 助手完成 Harpoon 项目重构的完整实践
  • Android NDK与JNI深度解析
  • Day01_C++编程
  • 终端VS命令解释器(Linux Windows)
  • 算法牢笼与思想飞地:在人工智能时代守卫灵魂的疆域
  • 【使用TPCC和TPCH进行性能测试】
  • 编程日常开发工具整理
  • 顺丰面试提到的一个算法题
  • C# 继承 虚方法
  • linux性能调整和故障排查
  • Python进阶知识之pandas库
  • 前端开发 React 状态优化
  • 面向对象分析与设计40讲(7)设计原则之合成复用原则
  • 前端实现可编辑脑图的方案
  • 网络编程初识(详细易懂)
  • 嵌入式linux下的NES游戏显示效果优化方案:infoNES显示效果优化
  • Python进阶知识之pandas库(一)基础数据类型
  • Android热修复实现方案深度分析
  • Android root和完整性检测实现方案深度分析
  • 海信IP501H-IP502h_GK6323处理器-原机安卓9专用-TTL线刷烧录可救砖
  • HTTPS证书体系,证书加密流程(通信体系)
  • lumerical——光纤布拉格光栅(Fiber Bragg gratings)