第十一篇 描述UI-你的第一个组件

你的第一个组件

组件是 React 的核心概念之一。 它们是您构建用户界面 (UI) 的基础,这使它们成为您开始 React 之旅的完美起点!

你将学习

  • 什么是组件
  • 组件在 React 应用程序中扮演什么角色
  • 如何编写你的第一个 React 组件

组件:UI 构建块

在 Web 上,HTML 允许我们使用其内置的标签(如 <h1> 和 <li>)创建丰富的结构化文档:

<article>
  <h1>My First Component</h1>
  <ol>
    <li>Components: UI Building Blocks</li>
    <li>Defining a Component</li>
    <li>Using a Component</li>
  </ol>
</article>

此标记表示这篇文章 <article>、它的标题 <h1> 和一个(缩写的)目录作为有序列表 <ol>。 像这样的标记,结合用于样式的 CSS 和用于交互的 JavaScript,存在于每个侧边栏、头像、模式、下拉列表的背后——您在 Web 上看到的每一个 UI。

React 允许您将标记、CSS 和 JavaScript 组合到自定义“组件”中,为您的应用程序提供可重用的 UI 元素。 您在上面看到的目录代码可以变成一个可以在每个页面上呈现的 <TableOfContents /> 组件。 在底层,它仍然使用相同的 HTML 标签,如 <article>、<h1> 等。

就像使用 HTML 标签一样,您可以组合、排序和嵌套组件来设计整个页面。 例如,您正在阅读的文档页面就是由 React 组件组成的:

<PageLayout>
  <NavigationHeader>
    <SearchBar />
    <Link to="/docs">Docs</Link>
  </NavigationHeader>
  <Sidebar />
  <PageContent>
    <TableOfContents />
    <DocumentationText />
  </PageContent>
</PageLayout>

随着项目的发展,您会注意到您的许多设计都可以通过重用您已经编写的组件来组合,从而加快您的开发速度。 我们上面的目录可以添加到任何带有 <TableOfContents /> 的屏幕! 您甚至可以使用 React 开源社区共享的数千个组件(如 Chakra UI 和 Material UI)来快速启动您的项目。

定义组件

传统上,在创建网页时,Web 开发人员标记他们的内容,然后通过添加一些 JavaScript 来添加交互。 当交互在网络上是一个不错的选择时,这很有效。 现在许多站点和所有应用程序都希望它。 React 将交互性放在首位,同时仍然使用相同的技术:React 组件是一个 JavaScript 函数,您可以在其中添加标记。 这是它的样子(您可以编辑下面的示例):

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

以下是构建组件的方法:

第 1 步:导出组件

export default前缀是标准的 JavaScript 语法(不特定于 React)。 它允许您在文件中标记主要功能,以便您以后可以从其他文件导入它。 (有关导入和导出组件的更多信息!)

第 2 步:定义函数

使用 function Profile() { } 可以定义一个名为 Profile 的 JavaScript 函数。

"缺陷

React 组件是常规的 JavaScript 函数,但它们的名称必须以大写字母开头,否则它们将无法工作!

第 3 步:添加标记

该组件返回一个带有 src 和 alt 属性的 <img /> 标签。 <img /> 写得像 HTML,但它实际上是 JavaScript! 这种语法称为 JSX,它允许您在 JavaScript 中嵌入标记。

Return 语句可以全部写在一行中,就像在这个组件中一样:

return <img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />;

但是,如果您的标记不与 return 关键字在同一行,则必须将其括在一对括号中,如下所示:

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

"缺陷
如果没有括号,return 之后的行中的任何代码都将被忽略!

使用组件

现在您已经定义了您的Profile组件,您可以将它嵌套在其他组件中。 例如,您可以导出一个使用多个 Profile 组件的 Gallery 组件:

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

export default function Gallery() {
  return (
    <section>
      <h1>Amazing scientists</h1>
      <Profile />
      <Profile />
      <Profile />
    </section>
  );
}

浏览器看到的

注意外在的区别:

  • <section> 是小写的,所以 React 知道我们指的是一个 HTML 标签。
  • <Profile /> 以大写 P 开头,因此 React 知道我们要使用名为 Profile 的组件。
    Profile 包含更多 HTML:<img />。 最后,这是浏览器看到的:
<section>
  <h1>Amazing scientists</h1>
  <img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
  <img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
  <img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
</section>

嵌套和组织组件

组件是常规的 JavaScript 函数,因此您可以将多个组件保存在同一个文件中。 当组件相对较小或彼此紧密相关时,这很方便。 如果此文件变得拥挤,您始终可以将Profile移动到单独的文件中。 您将很快在有关导入的页面上了解如何执行此操作。

因为 Profile 组件在 Gallery 内部渲染——甚至多次!——我们可以说 Gallery 是父组件,将每个 Profile 渲染为“子组件”。 这是 React 魔力的一部分:您可以定义一个组件一次,然后在任意多处多次使用它。

"缺陷

组件可以呈现其他组件,但您绝不能嵌套它们的定义:

export default function Gallery() {
  // 🔴 Never define a component inside another component!
  function Profile() {
    // ...
  }
  // ...
}

上面的代码片段非常慢并且会导致错误。 相反,在顶层定义每个组件:

export default function Gallery() {
  // ...
}

// ✅ Declare components at the top level
function Profile() {
  // ...
}

当子组件需要来自父组件的一些数据时,通过 props 传递它而不是嵌套定义。

深度阅读:组件一直向下

您的 React 应用程序从“根”组件开始。 通常,它会在您开始一个新项目时自动创建。 例如,如果您使用 CodeSandbox 或 Create React App,则根组件定义在 src/App.js 中。 如果您使用 Next.js 框架,则根组件定义在 pages/index.js 中。 在这些示例中,您一直在导出根组件。

大多数 React 应用程序一直使用组件。 这意味着您不仅可以将组件用于按钮等可重用部分,还可以将组件用于侧边栏、列表以及最终完整页面等更大的部分! 组件是组织 UI 代码和标记的便捷方式,即使其中一些只使用一次。

像 Next.js 这样的框架更进一步。 它们不是使用一个空的 HTML 文件并让 React“接管”使用 JavaScript 管理页面,而是从您的 React 组件自动生成 HTML。 这允许您的应用程序在加载 JavaScript 代码之前显示一些内容。

尽管如此,许多网站仅使用 React 来添加“互动性”。 它们有很多根组件,而不是整个页面只有一个。 您可以根据需要使用尽可能多或尽可能少的 React。

回顾

你刚刚第一次尝到了 React 的滋味! 让我们回顾一些关键点。

  • React 允许您为您的应用程序创建组件、可重用的 UI 元素。
  • 在 React 应用程序中,每一块 UI 都是一个组件。
  • React 组件是常规的 JavaScript 函数,除了:
    • 1.他们的名字总是以大写字母开头。
    • 2.他们返回 JSX 标记。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容