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

新手求助:引入CDN后如何创建React/React-Bootstrap JS模块

解决CDN引入React/React-Bootstrap后模块脚本的标准导入问题

你当前的问题核心是:通过CDN引入的UMD格式库会挂载到window全局对象,但模块脚本(data-type="module")需要标准的ES模块导入语法,不想直接使用window.React这类写法。下面提供两种解决方案:

方案一:基于现有全局变量转换为标准写法

既然库已经挂载到window,可以在模块脚本开头直接从window中提取所需对象,之后就能用标准语法编写代码:

修改后的script.js:

// 从window提取全局变量,转换为模块内的局部变量
const { React, ReactDOM } = window;
const { ProgressBar } = window.ReactBootstrap;

class Hello extends React.Component {
  render() {
    return <h1>hello H1</h1>;
  }
}

class Prog extends React.Component {
  render() {
    return <ProgressBar now={60} id='myPB'/>;
  }
}

// 用标准变量名调用渲染方法
ReactDOM.render(<Hello />, document.getElementById('el1'));
ReactDOM.render(<Prog />, document.getElementById('el2'));

这种方法不需要修改HTML中的CDN链接,快速适配现有代码结构。

方案二:改用ES模块CDN链接(推荐学习标准写法)

现代CDN提供了ES模块版本的库,配合importmap可以实现完全标准的ES模块导入,更贴近实际开发中的React项目写法:

第一步:修改index.html的CDN链接和添加importmap

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
    <!-- 添加importmap映射,简化模块导入路径 -->
    <script type="importmap">
      {
        "imports": {
          "react": "https://cdn.jsdelivr.net/npm/react@18/+esm",
          "react-dom": "https://cdn.jsdelivr.net/npm/react-dom@18/+esm",
          "react-bootstrap": "https://cdn.jsdelivr.net/npm/react-bootstrap@2/+esm"
        }
      }
    </script>
    <title>Hello React!</title>
  </head>
  <body>
    <div id="root">
      <div id="el1"></div>
      <div id="el2"></div>
    </div>
    <script type="text/babel" data-type="module" src="/script.js"></script>
  </body>
</html>

第二步:修改script.js为标准ES模块语法

import React from 'react';
import ReactDOM from 'react-dom/client';
import { ProgressBar } from 'react-bootstrap';

class Hello extends React.Component {
  render() {
    return <h1>hello H1</h1>;
  }
}

class Prog extends React.Component {
  render() {
    return <ProgressBar now={60} id='myPB'/>;
  }
}

// React 18推荐的createRoot渲染方式
const rootEl1 = ReactDOM.createRoot(document.getElementById('el1'));
rootEl1.render(<Hello />);

const rootEl2 = ReactDOM.createRoot(document.getElementById('el2'));
rootEl2.render(<Prog />);

这种方案完全遵循ES模块规范,不需要依赖全局变量,适合学习React的标准开发模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:10:12