React-forwardRef-useImperativeHandle

forwardRef 暴露dom节点

作用:使用ref暴露DOM节点给父组件

案例

例如在父组件中想要获取子组件input的输入值,和让input获取焦点

父组件
javascript 复制代码
import { Button } from 'antd-mobile'
import Son from "./components/son";
import { useState,useRef } from "react";
const Year = () => {
  const inputRef = useRef(null)
  const getinputRef =()=>{
  console.log(inputRef);
  console.log(inputRef.current.value);    //子组件的输入内容
  inputRef.current.focus() //获取焦点
  }
  return (
    <div>
      父组件
      <Son ref={inputRef}></Son>
      <div className="purple-theme">
        <Button color="primary" onClick={getinputRef}>按钮</Button>
      </div>
    </div>
  );
};
export default Year;
子组件
javascript 复制代码
import { forwardRef } from "react";
const Son = forwardRef((props,ref) => {
    console.log('我是子组件'); 
  return (
    <div>
      我是子组件
      <input type="text" ref={ref}></input>
    </div>
  );
})
export default Son;

useImperativeHandle 暴露子组件方法

作用:使用ref暴露子组件中的方法

案例

父组件通过ref调用子组件内部的focus方法实现使input获取焦点

子组件
javascript 复制代码
import { forwardRef,useImperativeHandle,useRef } from "react";
import { Button } from 'antd-mobile'
const Son = forwardRef((props,ref) => {
    console.log('我是子组件'); 
    const inputRef = useRef(null)
    //聚焦方法
    const FocusInput = ()=>{
        console.log(inputRef);
        inputRef.current.focus()
        
    }
    // 把子组件方法暴露出去
    useImperativeHandle(ref,()=>{
        return {
            FocusInput
        }
    })
  return (
    <div>
      我是子组件
      <input type="text" ref={inputRef}></input>
    </div>
  );
})
export default Son;
父组件
javascript 复制代码
import { Button } from 'antd-mobile'
import Son from "./components/son";
import { useState,useRef } from "react";
const Year = () => {
  const SonRef = useRef(null) 
  //调用子组件暴露的方法
  const getinputRef =()=>{
      SonRef.current.getinputRef()
  }
  return (
    <div>
      父组件
      <Son ref={SonRef}></Son>
      <div className="purple-theme">
        <Button color="primary" onClick={getinputRef}>按钮</Button>
      </div>
    </div>
  );
};
export default Year;
相关推荐
牛奶5 分钟前
AI辅助开发的基础概念
前端·人工智能·ai编程
摸鱼的春哥8 分钟前
Agent教程15:认识LangChain,Agent框架的王(上)
前端·javascript·后端
明月_清风1 小时前
自定义右键菜单:在项目里实现“选中文字即刻生成新提示”
前端·javascript
明月_清风1 小时前
告别后端转换:高质量批量导出实战
前端·javascript
刘发财6 小时前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
牛奶8 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶8 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
Kagol11 小时前
🎉OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用!
前端·开源·agent
GIS之路12 小时前
ArcGIS Pro 中的 notebook 初识
前端
JavaGuide12 小时前
7 道 RAG 基础概念知识点/面试题总结
前端·后端