react 组件导入导出

Posted on 2026-04-02 09:28  打杂滴  阅读(2)  评论(0)    收藏  举报

在 React 中,根组件(Root Component)是应用的入口组件,也是整个 React 组件树的起点。它通常被渲染到 HTML 文档中的一个特定 DOM 元素上,比如 index.html 文件中的 <div id="root"></div> 元素。

根组件的主要作用是组织和渲染其他子组件。它负责将应用的不同部分组合在一起,形成一个完整的用户界面。在典型的 React 应用中,根组件通常被命名为 App.js,并定义为一个函数组件或类组件。

根组件文件

创建了一个 Profile 组件,并且渲染在 Gallery 组件里。App.js代码如下:

function Profile() {
  return (
    <img
      src="https://i.imgur.com/MK3eW3As.jpg"
      alt="Katherine Johnson"
    />
  );
}

export default function Gallery() {
  return (
    <section>
      <h1>了不起的科学家们</h1>
      <Profile />
      <Profile />
      <Profile />
    </section>
  );
}
 

image

 在此示例中,所有组件目前都定义在 根组件 App.js 文件中。具体还需根据项目配置决定,有些根组件可能会声明在其他文件中。如果你使用的框架基于文件进行路由,如 Next.js,那你每个页面的根组件都会不一样。

 

 

导出和导入一个组件

在 React 中,要让一个 JS 文件中的内容(如组件、函数或变量)被另一个文件使用,必须先将它们导出(export),然后在另一个文件中导入(import)。这是 JavaScript 模块系统的基本机制,适用于 React 应用。

 如果将来需要在首页添加关于科学书籍的列表,亦或者需要将所有的资料信息移动到其他文件。这时将 Gallery 组件和 Profile 组件移出根组件文件会更加合理。这会使组件更加模块化,并且可在其他文件中复用

创建Gallery.js

将 Profile 组件和 Gallery 组件移出, 移动到Gallery.js

function Profile() {
  return (
    <img
      src="https://i.imgur.com/QIrZWGIs.jpg"
      alt="Alan L. Hart"
    />
  );
}

export default function Gallery() {
  return (
    <section>
      <h1>了不起的科学家们</h1>
      <Profile />
      <Profile />
      <Profile />
    </section>
  );
}
App.js 代码如下:

import Gallery from './Gallery.js';

export default function App() {
return (
<Gallery />
);
}

image

 

image

 效果如初

该示例中需要注意的是,如何将组件拆分成两个文件:

Gallery.js:
定义了 Profile 组件,该组件仅在该文件内使用,没有被导出。
使用 默认导出 的方式,将 Gallery 组件导出
App.js:
使用 默认导入 的方式,从 Gallery.js 中导入 Gallery 组件。
使用 默认导出 的方式,将根组件 App 导出。

引入过程中,你可能会遇到一些文件并未添加 .js 文件后缀,如下所示:

import Gallery from './Gallery';
无论是 './Gallery.js' 还是 './Gallery',在 React 里都能正常使用,只是前者更符合 原生 ES 模块。

 

默认导出 vs 具名导出

这是 JavaScript 里两个主要用来导出值的方式:默认导出和具名导出。到目前为止,我们的示例中只用到了默认导出。但你可以在一个文件中,选择使用其中一种,或者两种都使用。一个文件里有且仅有一个 默认 导出,但是可以有任意多个 具名 导出。

image

 

组件的导出方式决定了其导入方式。当你用默认导入的方式,导入具名导出的组件时,就会报错。如下表格可以帮你更好地理解它们:

 

image

 

 

当使用默认导入时,你可以在 import 语句后面进行任意命名。比如 import Banana from './Button.js',如此你能获得与默认导出一致的内容。相反,对于具名导入,导入和导出的名字必须一致。这也是称其为 具名 导入的原因!

通常,文件中仅包含一个组件时,人们会选择默认导出,而当文件中包含多个组件或某个值需要导出时,则会选择具名导出。 无论选择哪种方式,请记得给你的组件和相应的文件命名一个有意义的名字。我们不建议创建未命名的组件,比如 export default () => {},因为这样会使得调试变得异常困难。


 

从同一文件中导出和导入多个组件

如果你只想展示一个 Profile 组,而不展示整个图集。你也可以导出 Profile 组件。但 Gallery.js 中已包含 默认 导出,此时,你不能定义 两个 默认导出。但你可以将其在新文件中进行默认导出,或者将 Profile 进行 具名 导出。同一文件中,有且仅有一个默认导出,但可以有多个具名导出!

 为了减少在默认导出和具名导出之间的混淆,一些团队会选择只使用一种风格(默认或者具名),或者禁止在单个文件内混合使用。这因人而异,选择最适合你的即可!

 Gallery.js 包含两个导出:一个是默认导出的 Gallery,另一个是具名导出的 Profile。App.js 中均导入了这两个组件。
 Gallery.js:

export function Profile() {
return (
<img
src="https://i.imgur.com/QIrZWGIs.jpg"
alt="Alan L. Hart"
/>
);
}

export default function Gallery() {
return (
<section>
<h1>了不起的科学家们</h1>
<Profile />
<Profile />
<Profile />
</section>
);
}

App.js:

import Gallery from './Gallery.js';
import { Profile } from './Gallery.js';

export default function App() {
return (
<section>
<Gallery />
<Profile />
</section>
);
}

示例中混合使用了默认导出和具名导出:

Gallery.js:
使用 具名导出 的方式,将 Profile 组件导出,并取名为 Profile。
使用 默认导出 的方式,将 Gallery 组件导出。
App.js:
使用 具名导入 的方式,从 Gallery.js 中导入 Profile 组件,并取名为 Profile。
使用 默认导入 的方式,从 Gallery.js 中导入 Gallery 组件。
使用 默认导出 的方式,将根组件 App 导出。

image

image

 

 

image

 

 

 

 

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3