You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在另一组件内调用已有div组件?React组件复用咨询

解决方案:复用大体积Div组件到Modal的Paper中

不推荐使用getElementById的原因

直接操作真实DOM(比如getElementById)违背React虚拟DOM的设计逻辑,会导致组件状态与DOM不同步,引发渲染异常、性能问题,完全没必要在React项目里这么做。


方法1:封装为独立React组件(最推荐)

把体积庞大的div封装成一个可复用的函数组件,在原位置和Modal的Paper中直接调用即可,这是React组件复用的标准方式:

// 定义可复用组件
const DownloadSection = () => {
  return (
    <div id='download'>
      {/* 原div内的所有内容 */}
      .....
    </div>
  );
};

// 原位置使用
<DownloadSection />

// Modal内的Paper中使用
<Modal>
  <Box sx={style} >
    <Paper elevation={0}>
      <DownloadSection /> {/* 直接复用组件 */}
      <Typography id="transition-modal-description" sx={{ mt: 2 }}>
        Duis mollis, est non commodo luctus, nisi erat porttitor ligula.
      </Typography>
    </Paper>
  </Box>
</Modal>

如果需要传递参数,还可以给组件添加props,灵活适配不同场景。


方法2:用变量存储JSX元素(适合简单场景)

如果只是同一文件内的简单复用,不需要传递props,也可以把JSX元素赋值给变量,在两个地方渲染:

// 定义JSX变量
const downloadContent = (
  <div id='download'>
    {/* 原div内的所有内容 */}
    .....
  </div>
);

// 原位置使用
{downloadContent}

// Modal内的Paper中使用
<Modal>
  <Box sx={style} >
    <Paper elevation={0}>
      {downloadContent} {/* 复用JSX变量 */}
      <Typography id="transition-modal-description" sx={{ mt: 2 }}>
        Duis mollis, est non commodo luctus, nisi erat porttitor ligula.
      </Typography>
    </Paper>
  </Box>
</Modal>

这种方式比封装组件更轻量,但灵活性不如组件,适合不需要动态逻辑的静态内容复用。

内容的提问来源于stack exchange,提问作者user460567

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:07:08