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

news2025/1/13 2:59:12

文章目录

  • 本文目标
  • 开发前的准备
  • 编写主页面 `index.html`
  • 编写外壳组件 `App.js`
  • 编写入口文件 `index.js`
  • 代码组件化
    • 开发 Hello 组件
    • 开发 Welcome 组件
    • 引用组件
    • 组件化实现效果
  • 样式的模块化
  • 提升编码效率

本文目标

通过使用脚手架确实让我们很方便的创建一个 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 类式组件:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣(LeetCode)11. 盛最多水的容器(C++)

双指针贪心 盛水的面积 长度 \times 左右柱子最低高度 area(r−l)min(height[l],height[r])area (r-l)\times min(height[l],height[r])area(r−l)min(height[l],height[r]) 初始时&#xff0c;我们不知道每个柱子的高度&#xff0c;但是我们可以选取最左侧柱子和最右侧柱子…

期望E与高斯分布的期望

目录 1. 期望定义 2. 期望性质 2.1 用期望定义方差 / 标准差 方差定义 标准差定义 方差的表示——离散型&#xff1a; 方差的表示——连续型&#xff1a; 方差的性质 3. (一元)高斯分布定义 4. (一元)高斯分布的性质 5. 二维随机向量的数学期望E与方差σ 参考 1. …

PyCharm安装部署(一) 百篇文章学PyQT

本文章是百篇文章学PyQT的第一篇&#xff0c;本文讲述如何安装PyCharm IDEA工具&#xff0c;其它工具也可以但是PyCharm 相对来说用的人多大家都认可(方案成熟)&#xff0c;pycharm是一款功能强大的python编辑器&#xff0c;具有跨平台性&#xff0c;本文介绍一下pycharm在wind…

SSM 医院在线挂号系统

SSM 医院在线挂号系统 SSM 医院在线挂号系统 功能介绍 首页 登录注册 图片轮播展示 系统简介 系统公告 医院介绍 医生展示 医院资讯 预约挂号 收藏 评论 在线留言 查看留言 后台管理 登录 管理员管理 修改密码 医院信息管理 医生信息管理 用户权限管理 科室信息管理 预约挂号…

微信小程序如何转云开发

微信小程序云开发&#xff0c;为前端全栈开发提供了很大的便利。本文主要介绍普通的微信小程序如何让转为云开发。 一、建cloudfunction文件夹 cloudfunction文件夹建立在小程序的根目录下。 二、修改 project.config.json配置 在 project.config.json文件中&#xff0c;添加&…

ip子网的划分方法

目录 1 子网划分的定义&#xff1a; 2 掩码介绍 3、子网划分要解决的问题&#xff1a; 4 子网划分步骤 5 范例1根据ip和掩码求子网和网络广播地址&#xff1a; 6 范例2根据ip和掩码求同网段地址 7 合并子网的例子根据ip范围合并&#xff0c;并添加回程路由&#xff1a; …

还不进来看吗?c趁你不注意偷偷将你的数据类型转换啦

前言 如果不了解 整形提升 的小伙伴可就要注意了,c偷偷将你的数据类型改变了你都不知道.快点和牛牛一起学习一下c语言中 整形提升的知识吧 ! 一、整形提升是什么&#xff0c;又是怎样提升的? 不知道小伙伴们有没有听过整形提升这个词? 整形提升是什么呢? C语言中,在进行…

[附源码]java毕业设计石林县石漠化信息查询分析系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【GlobalMapper精品教程】020:Lidar点云数据分类(自动分类、手动分类)案例详解

航测点云通常跟DSM一致,即包含植被、房屋等信息,必须进行点云分类、过滤,才能生成准确的高程点、等高线和DEM等地形数据。本文以案例的形式详细讲解globalmapper23中点云工具及使用方法。 文章目录 1. 点云分类2. 创建地面高程格网3. 地形绘制4. 格网转点云5. 点云抽稀6. 点…

面试:java中的各种锁

共享锁 共享锁有CountDownLatch, CyclicBarrier, Semaphore, ReentrantReadWriteLock等 ReadWriteLock&#xff0c;顾名思义&#xff0c;是读写锁。它维护了一对相关的锁 — — “读取锁”和“写入锁”&#xff0c;一个用于读取操作&#xff0c;另一个用于写入操作。“读取锁…

java计算机毕业设计ssm建设路小学芙童币和芙童印章管理系统

项目介绍 随着移动互联网技术的迅速发展,时代对人们的知识水平和综合素质要求也越来越高了,各种教育管理系统层出不穷。其中以建设路小学吉祥物“芙童”为卡通原型设计的芙童印章、芙童币深受学生和老师们的喜爱。这是学校结合德育教学、少先队活动和社会实践活动为他们量身定…

Mybatis源码解析(六):一级缓存和二级缓存的优先级

Mybatis源码系列文章 手写源码&#xff08;了解源码整体流程及重要组件&#xff09; Mybatis源码解析(一)&#xff1a;环境搭建 Mybatis源码解析(二)&#xff1a;全局配置文件的解析 Mybatis源码解析(三)&#xff1a;映射配置文件的解析 Mybatis源码解析(四)&#xff1a;s…

Unity学习笔记[一] RollBall小游戏

目录 一、适配vs 二、初识Unity 2.1 unity核心模块 2.2 Unity基本操作和场景操作 2.3 世界坐标系和局部坐标系 2.4 工具栏 QWER 三、基础知识 3.1 基本组件 3.2 刚体组件 3.2.1 获取刚体组件 3.2.2 给刚体施加力 3.3 三维向量Vector3 3.4 通过按键控制左右运动 3…

【Pygame】 游戏开发 基础知识

【Pygame】 第一课 游戏开发 基础知识概述Pygame 的安装Pygame 基础命令pygame.locals 模块pygame.init()pygame.display.set_mode()案例Pygame 显示文字pygame.font.Font()fill()render()blit()pygame.display.update()案例显示英文显示中文概述 Pygame 是一个跨平台的 Pytho…

计算机网络 - 物理层数据链路层大题复习题

文章目录1、在下面给出的TCP/IP层次模型图示中填写空缺处①-⑤的协议名称。2、请写出在OSI的第几层分别处理下面的问题&#xff1f;3、试简述数据链路层的三个基本问题为什么都必须加以解决&#xff1f;4、收发两端之间的传输距离为100km&#xff0c;信号在媒体上的传播速率为2…

网络层协议数据单元-N_PDU

诊断协议那些事儿 关联文章&#xff1a; UDS的OSI模型 ISO14229各Part介绍&#xff1a;第三部分&#xff1a;CAN实施的统一诊断服务&#xff08;UDSonCAN&#xff09; UDS诊断网络层ISO15765-2&#xff08;CAN&#xff09; 功能寻址的注意事项 文章目录诊断协议那些事儿一、N_…

雅思词汇真经单词共3663个

雅思词汇真经 / Vocabulary for IELTS / 学为贵 赢未来 / 英语真经派学习法 一本书精通雅思词汇 / 刘洪波 编著 / 涵盖&#xff1a;雅思必备核心词汇刘洪波老师原创雅思考点词库 逻辑词群记忆法&#xff0c;一群一群记单词&#xff0c;快速备考无负责 时尚插图&#xff0c;趣味…

Golang实现小型CMS内容管理功能(一):Gin框架搭配Gorm实现增删查改功能

我自己开发了一款在线客服系统&#xff0c;最近一直琢磨把客服系统官网做好。因为访客来的人不少&#xff0c;大部分人可能就是看看官网界面就走了&#xff0c;怎样把这些访客留存下来&#xff0c;去测试试用客服系统&#xff0c;是我一直琢磨的问题。 官网是一个企业的门面&a…

PyQT6 pip install (三) 百篇文章学PyQT

本文章是百篇文章学PyQT的第三篇&#xff0c;本文讲述如何使用PIP安装PyQT6&#xff0c;PyQT6在安装过程中会遇到很多问题&#xff0c;博主在本篇文章中将遇到和踩过的坑总结出来&#xff0c;可以供大家参考&#xff0c;希望大家安装顺利。包括 安装、遇到问题的解决方案、怎么…

卷积运算与卷积核DLC

一、卷积运算 在数学上&#xff0c;卷积的定义是&#xff1a;两个函数在反转和位移后的乘积的积分&#xff0c;其公式表现为&#xff1a; 其中称g为过滤器&#xff0c;f为信号。 但是在深度学习中&#xff0c;卷积并不进行反转&#xff0c;而是直接进行逐元素的乘法和加法&…