react学习笔记-组件的导入和导出

组件的导入和导出

组件的神奇之处在与它们的可重用性:你可以创建一个由其他组件构成的组件。但当你潜逃了越来越多的组件时,则需要将它们拆分成不同的文件。这样可以使得查找文件更加容易,并且能在更多地方复用这些组件。

你将会学习到

-何为根组件

-如何导入和导出一个组件

-何时使用默认和具名导入导出

-如何在一个文件中导入导出多个组件

-如何将组件拆分成多个文件

根组件文件

在你的第一个组件中,你创建了一个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>

  );

}

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

导出和导入一个组件

如果将来需要在首页添加关于科学书籍的列表,亦或着需要将所有的资料信息移动到其他文件。这时将Gallery组件和Profile组件移出根组件文件会更加合理。这会使组件更加模块化,并且可在其他文件中复用。你可以根据以下三个步骤对组件进行拆分:

1.创建一个新的JS文件来存放该组件。

2.导出该文件中的函数组件(可以使用默认导出具名导出

3.在需要使用该组件的文件中导入(可以根据相应的导出方式使用默认导入具名导入

这里将Profile组件和Gallery组件,从App.js文件中移动到了Gallery.js文件中。修改后,即可在App.js中导入Gallery.js中的Gallery组件:

Gallery.js:

function Profile() {

    return (

        <img 

            src="https://i.imgur.com/test.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 />

    )

}

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

  1. Gallery.js:

-定义了Profile组件,该组价仅在该文件内使用,没有被导出

-使用默认导出的方式,将Gallery组件导出

  1. App.js:

-使用默认导入的方式,从Gallery.js中导入Gallery组件

-使用默认导出的方式,将根组件App导出

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

import Gallery from ‘./Gallery’;

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

默认导出vs具名导出

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

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

语法

导出语句

导入语句

默认

export default function Button() {}

Import Button from ‘./Button.js’;

具名

export function Button(){}

Import { Button } from ‘./Button.js’;

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

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

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

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

注意:

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

首先,用具名导出的方式,将Profile组件从Gallery.js导出(不使用default关键字):

export function Profile() {

    // ...

}

接着,用具名导入的方式,从Gallery.js文件中导入Profile组件(用大括号):

import { Profile } from ‘./Gallery.js’;

最后,在App组件里渲染<Profile />;

export default function App() {

    Return <Profile />;

}

现在,Gallery.js包含两个导出:一个默认导出的Gallery,另一个是具名导出的Profile。App.js中均导入了两个组件。尝试将<Profile />改成<Gallery />,回到示例中:

App.js:

import Gallery from './Gallery.js';

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

export default function App() {

    return (

        <Profile />

    )

}

Gallery.js:

export function Profile() {

    return (

        <img 

            src="https://i.imgur.com/test.jpg"

            alt="Alan L.Hart"

        />

    );

}

export default function Gallery() {

    return (

        <section>

            <h1>了不起的科学家</h1>

            <Profile />

            <Profile />

            <Profile />

        </section>

    );

}

Gallery.js:

-使用具名导出的方式,将Profile组件导出,并取名为Profile。

-使用默认导出的方式,将Gallery组件导出。

App.js:

-使用具名导入的方式,从Gallery.js中导入Profile组件,并取名为Profile。

-使用默认导入的方式,从Gallery.js中导入Gallery组件。

-使用默认导出的方式,将根组件App导出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值