组件的神奇之处在于它们的可重用性:你可以创建一个由其他组件构成的组件。但当你嵌套了越来越多的组件时,则需要将它们拆分成不同的文件。这样可以使得查找文件更加容易,并且能在更多地方复用这些组件。
根组件文件
在 你的第一个组件 中,你创建了一个 Profile 组件,并且渲染在 Gallery 组件里。
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>
);
}
在此示例中,所有组件目前都定义在 根组件 App.js 文件中。具体还需根据项目配置决定,有些根组件可能会声明在其他文件中。如果你使用的框架基于文件进行路由,如 Next.js,那你每个页面的根组件都会不一样。
导出和导入一个组件
如果将来需要在首页添加关于科学书籍的列表,亦或者需要将所有的资料信息移动到其他文件。这时将 Gallery 组件和 Profile 组件移出根组件文件会更加合理。这会使组件更加模块化,并且可在其他文件中复用。你可以根据以下三个步骤对组件进行拆分:
创建 一个新的 JS 文件来存放该组件。
导出 该文件中的函数组件(可以使用 默认导出 或 具名导出)
在需要使用该组件的文件中 导入(可以根据相应的导出方式使用 默认导入 或 具名导入)。
这里将 Profile 组件和 Gallery 组件,从 App.js 文件中移动到了 Gallery.js 文件中。修改后,即可在 App.js 中导入 Gallery.js 中的 Gallery 组件:
import Gallery from './Gallery.js';
export default function App() {
return (
<Gallery />
);
}
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>
);
}
该示例中需要注意的是,如何将组件拆分成两个文件:
Gallery.js:
定义了 Profile 组件,该组件仅在该文件内使用,没有被导出。
使用 默认导出 的方式,将 Gallery 组件导出
App.js:
使用 默认导入 的方式,从 Gallery.js 中导入 Gallery 组件。
使用 默认导出 的方式,将根组件 App 导出。