【React学习笔记】第三章:React应用

ops/2025/1/20 16:21:11/

1.使用create-react-app创建 react 应用

1.1 react 脚手架

react提供了一个用于创建 react 项目的脚手架:create-react-app
项目的整体技术架构为:react + webpack + es6 + eslint

1.2 创建项目并启动

打开CMD
第一步: 全局安装react脚手架 npm install -g create-react-app
第二步: 创建hello-react项目:create-react-app hello-react
第三步: 进入项目文件夹:cd hello-react
第四步: 启动项目:npm start


也可以直接使用 npx(npm v5.2.0 引入的一条命令) 创建项目,无需安装脚手架
第一步: 初始化项目:npx create-react-app 项目名称
第二步: 启动项目: npm start


如果react安装的是19版本,可能因为版本不兼容问题报错:

npm install --no-audit --save @testing-library/jest-dom@^5.14.1

解决方式1:

npm install --no-audit --save @testing-library/jest-dom@^5.14.1
@testing-library/react@^13.0.0 @testing-library/user-event@^13.2.1
@types/jest@^27.0.1 @types/node@^16.7.13 @types/react@^19.0.0
@types/react-dom@^19.0.0 typescript@^4.4.2 web-vitals@^2.1.0
–legacy-peer-deps\

方式2:
重新安装18版本的
npm install react@18 react-dom@18

1.3 react脚手架项目结构

在这里插入图片描述
项目目录结构分析:

  • public —— 静态资源文件夹
    • favicon.icon —— 网站页签图标
    • index.html —— 主页面(只有一个html页面)
    • manifest.json —— 应用加壳的配置文件
    • robots.txt —— 爬虫协议文件
  • src —— 源码文件夹
    • App.css —— App组件的样式
    • App.js —— App组件
    • App.test.js —— 用于给App做测试
    • index.css —— 通用的样式,也可以在public-index.html中引入
    • index.js —— 入口文件
    • logo.svg —— logo 图
    • reportWebVitals.js —— 页面性能分析文件(需要web-vitals 库的支持
    • setupTests.js —— 用于做应用的整体测试(需要 jest-dom 的支持)

主文件执行顺序:
首先来到 src/index.js文件,引入react核心库、reactDOM、样式、App组件……
执行了ReactDOM.renderpublic/index.html中找对应的id的节点渲染组件

1.4 一个简单的Hello组件

1.4.1 index.js 入口文件

这个文件做了四件事:

  1. 引入 react 核心库
  2. 引入 react-dom
  3. 引入App组件
  4. 渲染App组件到页面
import React from 'react';
import ReactDOM from 'react-dom/client'
import App from './App'// 注意:18版本和19版本渲染方式不一样
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<React.StrictMode><App /></React.StrictMode>
);
1.4.2 App.js
// 引入react: 此处不是解构赋值的方式,是react中用了多种暴露的方式,es6的另外一种引入方式
import React, { Component} from 'react';
import Hello from './components/Hello/Hello'
import Welcome from './components/Welcome'// 创建并暴露App组件
export default class App extends Component {render() {return (<div><Hello /></div>)}
}
1.4.3 Hello组件

Hello.js

import React, { Component} from 'react'
import './Hello.css'export default class Hello extends Component {render() {return (<div><h2 className="title">Hello, React!</h2></div>)}
}

Hello.css

.title {background-color: orange;
}
1.4.4 注意点

1.使用模块化方式,在src/components文件夹下创建各个组件的文件夹
2.如何区分组件和写业务逻辑的普通js文件
 组件命名方式:
  ● 组件的首字母大写
  ● 组件文件的后缀使用 .jsx
3.引入组件时,.js、.jsx后缀可以省略
4.组件的文件名使用 index.jsx 在引入时可省略,例如:
components/Welcome/index.jsx
import Welcome from './components/Welcome'

1.4.5 样式的模块化

所有的文件最后都会被引入到App.js里面,如果模块的样式类名重复,样式会冲突,后引入的会替换掉之前的。

两个方式解决:
1.区分类名:使用不同的类名 或者 使用 less嵌套方式
2.使用样式的模块化,步骤如下:
  - 把样式的文件名改成xxx.module.css
  - 引入css样式文件 import xxx from './index.module.css'
  - 使用:<h2 className={xxx.title}>Hello, react</h2>
在这里插入图片描述
在这里插入图片描述

1.5 vscode中react插件

可以使用类似代码片段的功能
rcc (类式组件)、rfc(函数式组件)
在这里插入图片描述

2.组件的组合使用-TodoList案例

效果图:(具体实现代码此处不做展示,后续会上传资源)
在这里插入图片描述
1.判断键盘的Enter事件
 方式1:if (event.target.key ! == 13) return;
 方式2:event.target.key === 'Enter'
2.子组件传递数据给父组件
 - 在父组件中给子组件传递一个函数

// 给子组件传递一个函数
<Child addTodo={this.getInputValue} />// getInputValue 接收子组件传递过来的内容
getInputValue = (value) => {console.log(value)
}

 - 子组件调用这个函数并传递参数

this.props.addTodo('test');

3.对props进行限制
 1.下载prop-types库:yarn add prop-types
 2.引入:import PropTypes from 'prop-types'
4.生成唯一标识的库UUID/ nanoid
 1.安装:yarn add nanoid
 2.引入:import { nanoid } from 'nanoid'
 3.使用:nanoid()
5.注意defaultChecked和checked的区别,类似的还有defaultValue和value
6.状态在哪里,操作状态的方法就在哪里
7.动态初始化列表,如何确定将数据放在哪个组件的state中
 ● 某个组件使用:放在其自身的state中
 ● 某些组件使用:放在她们共同的父组件的state中(官方称此操作为:状态提升)


http://www.ppmy.cn/ops/151711.html

相关文章

【Bluedroid】HFP连接流程源码分析(四)

接上一篇分析【Bluedroid】HFP连接流程源码分析(三)-CSDN博客,本篇主要分析连接回调的处理部分。 bta_hf_client_mgmt_cback 蓝牙Hands-Free Profile (HFP) 客户端在RFCOMM层的一个管理回调函数。RFCOMM是蓝牙协议栈中用于模拟串行端口通信的一个协议,常用于HFP等蓝牙服务…

计算机的错误计算(二百一十六)

摘要 用一大模型计算 sin(0.99999) . 实验表明&#xff0c;通过联网搜索&#xff0c;大模型不仅介绍了如何计算sin(x), 还说明了sin(x)的应用等。其给出了正确的 Python代码&#xff0c;然而&#xff0c;其给出的值仅有4位正确数字。 例1. 计算 sin(0.99999) . 刚刚又上…

ubuntu常见指令详解

Ubuntu 是一个基于 Debian 的开源操作系统&#xff0c;广泛应用于服务器和桌面环境。以下是一些常用的 Ubuntu 命令及其详解&#xff0c;涵盖了文件操作、系统管理、网络配置、软件包管理等方面。 1. 文件与目录操作 ls - 列出目录内容 ls [选项] [目录]-l&#xff1a;详细列…

使用 Blazor 和 Elsa Workflows 作为引擎的工作流系统开发

开发一个完整的工作流系统使用 Blazor 和 Elsa Workflows 作为引擎&#xff0c;可以实现一个功能强大的工作流管理和设计系统。下面将提供详细的步骤和代码实现&#xff0c;展示如何在 Blazor 中开发一个基于 Elsa Workflows 的工作流系统。 项目概述 我们的工作流系统将包含以…

【golang学习之旅】使用VScode安装配置Go开发环境

1. 下载并安装Go 1.1 下载地址1.2 选择版本并下载1.3 安装目录1.4 验证是否安装成功 2. 配置环境变量 2.1 配置步骤2.2 GO部分环境变量说明 3. 下载或更新 Vscode 3.1 下载地址3.2 安装步骤 4. 为Go开发配置VScode 1. 下载并安装Go 1.1 下载地址 https://studygolang.com/dl…

Hadoop 和 Spark 的内存管理机制分析

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

高性能、并发安全的 Go 嵌入式缓存库 如何使用?

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

QT笔记- Qt6.8.1 Android编程 手机震动实现

#include "QJniObject" #include "QJniEnvironment"// 震动 - 需要手动添加权限android.permission.VIBRATE inline void vibrate(int milliseconds) {QJniObject context QNativeInterface::QAndroidApplication::context();QJniObject vibrator contex…