React 入门:使用脚手架写一个Hello组件

本文目标

通过使用脚手架确实让我们很方便的创建一个 React 项目基础代码结构,它为我们生成了默认的文件目录和代码文件,前面的章节已经做过详细的介绍。但为了加深理解,本文带你手写这些文件代码。

其实主要差异就在 src 目录下代码文件的组织方式上

  • 默认文件目录 在这里插入图片描述- 目标文件目录(学习目标) 在这里插入图片描述

可以看到二者差异较大,被移除的文件是因为对代码做了精简整理,去掉了我们暂时不需要的代码文件,并且对文件中代码也做了精简,下文会有展示说明。

开发前的准备

将脚手架生成的 publicsrc 目录剪切并移动到备份目录 01_脚手架自带的文件 中,并重新创建 publicsrc 目录。
在这里插入图片描述
此时的 publicsrc 目录都是空目录,接下来我们都在这两个目录中进行实践。

编写主页面 index.html

public 目录下创建一个 index.html 文件,并写入如下代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
    <title>hello, react 脚手架</title>
  </head>

  <body>
    <div id="root"></div>
  </body>
</html>

说明:

  • public 目录下放一个 favicon.ico 图标。
  • index.html 文件中必须包含一个 id 为 root(root 可以自定义其他,保证唯一即可) 的 DOM 容器,用来渲染虚拟 DOM。

编写外壳组件 App.js

src 目录下创建一个 App.js 文件(注意:组件名首字母要大些),并写入如下代码:

import React, { Component } from "react";

export default class App extends Component {
  render() {
    return (
      <div>
        <h2>Hello, React! </h2>
      </div>
    );
  }
}

编写入口文件 index.js

src 目录下创建一个 index.js 文件,并写入如下代码:

// 引入 react 核心库
import React from "react";
// 引入ReactDOM
import ReactDOM from "react-dom";
// 引入组件
import App from "./App";

// 渲染App组件到页面
ReactDOM.render(<App />, document.getElementById("root"));

代码组件化

src 目录下创建一个 components 目录,用来存放业务组件。

开发 Hello 组件

components 目录下创建一个 Hello 目录,并在 Hello 目录下创建 index.jsxindex.css 文件。

index.css 代码如下:

.title {
  background-color: red;
}

index.jsx 代码如下:

import React, { Component } from "react";
import "./index.css";

export default class Hello extends Component {
  render() {
    return <h2 className="title">Hello Component</h2>;
  }
}

开发 Welcome 组件

components 目录下创建一个 Welcome 目录,并在 Welcome 目录下创建 index.jsxindex.css 文件。

index.css 代码如下:

.title {
  background-color: blue;
}

index.jsx 代码如下:

import React, { Component } from "react";
import "./index.css";

export default class Welcome extends Component {
  render() {
    return <h2 className="title">Welcome Component</h2>;
  }
}

引用组件

Hello 组件和 Welcome 组件导入到外壳组件 App.js 中,并引用。

此时 App.js 的代码如下:

import React, { Component } from "react";
import Hello from "./components/Hello";
import Welcome from "./components/Welcome";

export default class App extends Component {
  render() {
    return (
      <div>
        <Hello />
        <Welcome />
      </div>
    );
  }
}

组件化实现效果

在这里插入图片描述

组件渲染成功,浏览器控制台无报错,但是有个问题,Hello 组件的样式丢失了,准确的讲是被覆盖了。为什么?怎么解决?请看下面的章节《样式模块化》。

样式的模块化

带着问题来说明,上面组件化章节,Hello 组件的红色背景样式被 Welcome 组件的蓝色背景样式覆盖了,是因为 Hello 组件和 Welcome组件的 CSS 样式使用了同名类式选择器 .title,而且 App.js 组件代码中先导入 Hello 组件,后导入 Welcome 组件,后导入的组件样式覆盖了先导入的组件样式,才出现了上面的问题。

那么如何解决?两种解决方式:

  • 使用 Less 的样式嵌套,此处不做详细介绍,后须文章再做详细介绍。基础代码如下:
 .hello {
   .title {
     background-color: red;
   }
 }

 .welcome {
   .title {
     background-color: blue;
   }
 }
  • 使用文件名 module 方式,进行样式模块化

Hello 组件的 index.css 样式文件重命名为 index.module.css,然后修改 Hello 组件 index.jsx 中样式引入方式,修改后的代码如下:

import React, { Component } from "react";
import Style from "./index.module.css";

export default class Hello extends Component {
  render() {
    return <h2 className={Style.title}>Hello Component</h2>;
  }
}

此时效果如下:
在这里插入图片描述

提升编码效率

从上面的编码过程中,会发现我们会频繁重复写组件中 import export render 等代码,你可能会想到复制粘体,但这里给你推荐另外一种提高编码效率的方式,就是使用代码编辑器或 IDE 的 代码片段 功能。

不同编辑器使用方式不同,但是思路和作用都一样,下面以 VSCode 为例来讲解。

本文也无需自己手动编写代码片段,而是安装并使用一个 VSCode 扩展 ES7 React/Redux/GraphQL/React-Native snippets,一定要看清楚,不要安装错了!!!

例如我们要快速创建一个 React 类式组件:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西涯三锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值