React 中,forwardRef 和 useImperativeHandle 配合实现父组件调用子组件方法和属性

这篇具有很好参考价值的文章主要介绍了React 中,forwardRef 和 useImperativeHandle 配合实现父组件调用子组件方法和属性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

React api 的用法简介:

     forwardRef: React 提供的一个特殊的 API,主要用于将 ref 属性从父组件 “转发”(forward)到子组件。在 React 中,ref 主要用于获取组件或 DOM 元素的引用,这样我们就可以在需要的时候访问和操作这些组件或元素。然而,由于 React 的 props 传递机制,我们无法直接将 ref 传递给子组件。这就是 forwardRef 的作用所在

      useImperativeHandle:减少暴露给父组件获取的DOM元素属性, 只暴露给父组件需要用到的DOM方法, 参数说明如下:

  • 参数1: 父组件传递的ref属性

  • 参数2: 返回一个对象, 以供给父组件中通过ref.current调用该对象中的方法

1、创建父组件,代码如下:

'use strict';
import React, { useRef } from 'react';
import { Button } from 'antd';

import TestModal from './modal';

const Test = props => {
  const testModalRef = useRef(null);
  const handleClick = () => {
    testModalRef.current.show();
  };
  return (
    <div>
      <Button type="primary" onClick={handleClick}>
        弹出
      </Button>
      <TestModal ref={testModalRef} />
    </div>
  );
};

export default Test;

2、创建子组件,代码如下:

'use strict';
import React, { useState, forwardRef, useImperativeHandle } from 'react';
import { Modal, Button } from 'antd';

const TestModal = forwardRef((props, ref) => {
  const [visible, updateVisible] = useState(false);
  useImperativeHandle(ref, () => ({ show }));
  // 打开对话框
  const show = data => {
    updateVisible(true);
  };
  // 关闭对话框
  const handleClose = () => {
    updateVisible(false);
  };
  // 确定事件
  const handleSure = () => {
    console.log('handleSure');
  };

  return (
    <Modal
      title="弹框"
      width="50%"
      open={visible}
      maskClosable={false}
      onCancel={handleClose}
      footer={[
        <div className="dialog-footer" key="dialogFooter">
          <Button size="small" key="cancel" onClick={handleClose}>
            取消
          </Button>
          <Button size="small" key="submit" type="primary" onClick={handleSure}>
            确定
          </Button>
        </div>
      ]}
    >
      <div className="create-group-content">测试</div>
    </Modal>
  );
});

export default TestModal;

子组件通过 forwardRef 接收父组件的 ref,通过 useImperativeHandle 将自己的属性和方法和父组件的 ref 实现绑定,并暴露给父组件。

个人小结,不喜勿喷。谢谢。文章来源地址https://www.toymoban.com/news/detail-805434.html

到了这里,关于React 中,forwardRef 和 useImperativeHandle 配合实现父组件调用子组件方法和属性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • react当我们有两个完全不相关的组件想要通信时,就可以利用这种模式,其中一个组件负责订阅某个消息,而另一个元素则负责发送这个消息。使用Context配合

    在nextjs项目中,发现两个组件没啥关系,例如一个是一直存在的头部组件,另一个是页面中的组件,当我点击头部组件中的特定按钮时,把数据传递到页面组件中,页面组件接受到canshu数据后在做其他操作,那么他们两个如何通讯,通过context配合观察者模式实现。 首先在其

    2024年02月15日
    浏览(49)
  • react 父组件调用子组件的属性或方法

    在vue3中, 子组件会使用 defineExpose 暴露出父组件需要访问的 变量 或 方法 父组件通过 ref 函数定义子组件的 refName ,并通过 refName.value.xxx 继续访问 可使用 useImperativeHandle 、 forwardRef 、 useRef 第一步,子组件 使用 useImperativeHandle 定义要暴露出去的内容,第一个参数是 ref forw

    2024年04月22日
    浏览(33)
  • React、Vue3中父组件如何调用子组件内部的方法

    当父组件需要调用子组件的方法时,可以通过useImperativeHandle钩子函数实现。以下例子是ts实现方式。 在子组件中使用 useImperativeHandle 钩子,将指定的方法暴露给父组件,以便父组件可以通过子组件的引用来调用该方法。 在子组件中使用了 useImperativeHandle 钩子将 someMethod 方法

    2024年02月16日
    浏览(36)
  • SpringBoot WebSocket配合react 使用消息通信

    引入websocket依赖 配置websocket websocket核心代码 react 前端部分代码

    2024年02月13日
    浏览(45)
  • Web开发:React+Flask实现实时相机调用

    为了方便利用机器视觉算法,使用React+Flask前后端分离的办法实现实时相机的调用。由前端向后端请求视频流,后端接受请求后向前端发送视频流数据,方便在后端使用各种算法对视频流数据进行处理。 成功实现后,打开相机开关,即可在前端调用相机。 项目采用前后端分离

    2024年01月22日
    浏览(30)
  • React实现点击切换组件

    实现如上组件 组件代码:  index.less样式文件  若想要实现如上效果,点击不切换左右顺序,只切换选中项,把onClick事件统一成changeActive就可以了

    2024年02月13日
    浏览(34)
  • element-ui 抽屉组件(el-drawer ) 二次封装 增加resize拖曳改变宽度大小,配合表格实现快捷方式打开抽屉展示详情及操作

    可配合自定义表格进行操作数据,点击表格某一行进行抽屉展示,可上下页切换查看及功能操作,1.快捷键esc关闭抽屉,// 快捷键控制上下翻页  shiftKey+上键 上一页    shiftKey加下键 下一页  shiftKey加左键 开启弹框展示第一条数据   shiftKey加右键关闭弹框   上代码

    2024年02月12日
    浏览(49)
  • React组件间数据传递(弹框和高阶组件(HOC)特性实现)

    在现代前端开发中,React 已经成为了最受欢迎的 JavaScript 库之一。而在复杂的应用中,不同组件之间的数据传递问题显得尤为关键。在本文中,我们将探讨一种高效的方法,即如何利用弹框和高阶组件特性来实现 React 组件间的数据传递。我们将通过一个具体的业务场景来深入

    2024年02月11日
    浏览(41)
  • React、Vue框架如何实现组件更新,原理是什么?

    原文合集地址如下,有需要的朋友可以关注 本文地址 合集地址 React 和 Vue 都是当今最流行的前端框架,它们都实现了组件化开发模式。为了优化性能,两者都采用了虚拟DOM技术。当组件状态发生改变时,它们会使用虚拟DOM进行局部渲染比对,只更新必要的DOM节点,从而避免重新渲染

    2024年02月17日
    浏览(53)
  • Taro React组件开发(8) —— RuiUploadImages 多图片上传组件【Promise.all 实现】

    1. 需求分析 使用 Taro.chooseImage 实现图片的选择; 使用 Taro.uploadFile 实现图片的上传; 由于 Taro.uploadFile API 的 filePath 只能是一张图片的路径,因此上边两个 API 只能实现单图图片上传。 2. 上传图片实现 组装完整的上传接口地址【 ${ server_env_url }${ config.default[data.url] } 】; 获取

    2023年04月24日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包