React学习笔记(一)——react基础

目录

1. React 介绍

1.1 React是什么

1.2 React的优势

1.3 React的市场情况

2. 开发环境搭建

2.1 使用create-react-app快速搭建开发环境

2.2 react 项目文件说明

2.3 index.js项目入口文件

2.4 App.js 项目根组件

2.5 react 调试工具安装

3. JSX基础-概念和本质

3.1 什么是JSX

3.2 JSX的本质

3.3 JSX高频场景-JSX中使用JS表达式

3.4 JSX高频场景-JSX中实现列表渲染

3.5 JSX高频场景-JSX中实现条件渲染

3.6 JSX高频场景-JSX中实现复杂条件渲染

4. React中的事件绑定

4.1 React 基础事件绑定

4.2 使用事件对象参数

4.3 传递自定义参数

4.4 同时传递事件对象和自定义参数

5. React中的组件

5.1 组件是什么

5.2 React组件

6. useState

6.1 useState基础使用

6.2 修改状态的规则—状态不可变

6.3 修改对象状态

7. 组件的样式处理

7.1 组件基础样式方案

8. 案例:B站评论

8.1 B站评论案例

8.2 渲染评论列表

8.3 实现评论删除

8.4 渲染Tab+点击高亮实现

8.5 classnames优化类名控制


1. React 介绍

1.1 React是什么

React由Meta公司研发,是一个用于 构建Web和原生交互界面的库

1.2 React的优势

相较于传统基于DOM开发的优势:
  • 组件化的开发方式
  • 不错的性能

相较于其它前端框架的优势:

  • 丰富的生态
  • 跨平台支持

1.3 React的市场情况

全球最流行,大厂必备

2. 开发环境搭建

2.1 使用create-react-app快速搭建开发环境

create-react-app是一个快速 创建React开发环境的工具, 底层由Webpack构建, 封装了配置细节 ,开箱即用
执行命令:
  • npx create-react-app react-basic
    • npx Node.js工具命令,查找并执行后续的包命令
    • create-react-app 核心包(固定写法),用于创建React项目
    • react-basic React项目的名称(可以自定义)
创建React项目的更多方式:
  • https://zh-hans.react.dev/learn/start-a-new-react-project

2.2 react 项目文件说明

  • 项目的根组件 App.js

  • 项目的入口,项目从这里开始运行 index.js

2.3 index.js项目入口文件

  • App.js -> index.js -> public/index.html(root)

2.4 App.js 项目根组件

2.5 react 调试工具安装

老方法——极简插件安装

参考:vue3.0学习笔记(一)——vue3简介与vite脚手架的使用——4.2 Vue.js Devtools 版本问题

3. JSX基础-概念和本质

3.1 什么是JSX

概念:
  • JSX 是 JavaScript 和 XML(HTML)的缩写,表示在 JS 代码中编写 HTML 模版结构,它是React 中编写 UI 模版的方式
优势:
  • HTML的声明式模版写法
  • JS的可编程能力

3.2 JSX的本质

JSX 并不是标准的 JS 语法,它是  JS 的语法扩展 ,浏览器本身不能识别,需要通过 解析工具做解析 之后才能在浏览器中运行

3.3 JSX高频场景-JSX中使用JS表达式

在 JSX 中可以通过 大括号语法{} 识别 JavaScript中的表达式,比如常见的变量、函数调用、方法调用等等

  • 使用引号传递字符串
  • 使用JS变量
  • 函数调用和方法调用
  • 使用JavaScript对象

​​​注意:

  • if语句、switch语句、变量声明属于语句,不是表达式,不能出现在{}中

3.4 JSX高频场景-JSX中实现列表渲染

语法:
  • 在JSX中可以使用原生JS中的map方法遍历渲染列表
  • map方法会返回一个新的数组,该数组包含通过对原始数组中的每个元素应用一个函数处理后得到的结果。

  • map 循环那个结构 return那个结构

  • key 的作用: React框架内部使用,提升更新性能

3.5 JSX高频场景-JSX中实现条件渲染

语法:
  • 在React中,可以通过逻辑与运算符&&、三元表达式(?:)实现基础的条件渲染

3.6 JSX高频场景-JSX中实现复杂条件渲染

需求:
  • 列表中需要根据文章状态适配三种情况,单图,三图,和无图三种模式
解决方案:
  • 自定义函数 + if判断语句

4. React中的事件绑定

4.1 React 基础事件绑定

语法:
  • on + 事件名称 = { 事件处理程序 },整体上遵循驼峰命名法

4.2 使用事件对象参数

语法:
  • 在事件回调函数中设置形参e

4.3 传递自定义参数

语法:
  • 事件绑定的位置改造成箭头函数的写法,在执行clickHandler实际处理业务函数的时候传递实参

注意:

  • 不能直接写函数调用,这里事件绑定需要一个函数引用

4.4 同时传递事件对象和自定义参数

5. React中的组件

5.1 组件是什么

概念:
  • 一个组件就是用户界面的一部分,它可以有自己的逻辑和外观,组件之间可以互相嵌套,也可以复用多次
  • 组件化开发可以让开发者像搭积木一样构建一个完整的庞大的应用

5.2 React组件

在React中,一个组件就是 首字母大写的函数 ,内部存放了组件的逻辑和视图UI, 渲染组件只需要把组件 当成标签书写 即可

6. useState

6.1 useState基础使用

useState 是一个 React Hook(函数),它允许我们向组件添加一个 状态变量 , 从而控制影响组件的渲染结果
5 本质:
  • 和普通JS变量不同的是,状态变量一旦发生变化组件的视图UI也会跟着变化(数据驱动视图)

说明:

  • useState是一个函数,返回值是一个数组
  • 数组中的第一个参数是状态变量,第二个参数是set函数用来修改状态变量
  • useState的参数将作为count的初始值
  • 需要先从 react 中导入 useState 函数

6.2 修改状态的规则—状态不可变

在React中,状态被认为是只读的,我们应该始终 替换它而不是修改它 直接修改状态不能引发视图更新

6.3 修改对象状态

规则:
  • 对于对象类型的状态变量,应该始终传给set方法一个全新的对象来进行修改
直接修改原对象,不引发视图变化
调用set传入新对象用于修改

7. 组件的样式处理

7.1 组件基础样式方案

React组件基础的样式控制有俩种方式:
  • 行内样式(不推荐)
  • class类名控制

① 行内样式

  • 第一个 {} 是一个语法, 第二个{} 是一个对象

② class类名控制

  • index.css

  • App.js

8. 案例:B站评论

8.1 B站评论案例

业务需求:
  • 渲染评论列表
  • 删除评论实现
  • 渲染导航Tab和高亮实现
  • 评论列表排序功能实现

8.2 渲染评论列表

核心思路:
  • 使用useState维护评论列表
  • 使用map方法对列表数据进行遍历渲染(别忘了加key)

评论列表数据:

① 使用useState维护评论列表

② 使用map方法对列表数据进行遍历渲染(别忘了加key)

8.3 实现评论删除

需求:
  • 只有自己的评论才显示删除按钮
  • 点击删除按钮,删除当前评论,列表中不再显示
核心思路
  • 删除显示 - 条件渲染
  • 删除功能 - 拿到当前项id以id为条件对评论列表做filter过滤

① 删除显示 - 条件渲染

  • 当前用户的 uid 与 list 列表中的列表项的 uid 相同,则显示删除按钮

② 删除功能 - 拿到当前项id以id为条件对评论列表做filter过滤

8.4 渲染Tab+点击高亮实现

需求:
  • 点击哪个tab项,哪个做高亮处理
核心思路:
  • 点击谁就把谁的type(独一无二的标识)记录下来,然后和遍历时的每一项的type做匹配,谁匹配到就设置负责高亮的类名

导航 Tab 数据:

① 点击谁就把谁的 type 记录下来

② 通过记录的 type 和每一项遍历时的 type 做匹配,控制激活类名 active 的显示

③ 根据 type 类型进行排序列表

  • hot ——根据点赞数排序

  • time——根据创建时间排序

④ 使用 lodash 库实现排序功能

lodash 库官网:Lodash

  • 下载
    • npm install lodash 或者 npm i lodash(不支持 yarn 安装)
  • 引入:
    • import _ from 'lodash'

  • _.orderBy(排序的对象或数组, 排序的条件, 升序排序/降序排序)方法,返回一个排序后的新数组

    • 升序排序/降序排序: asc/desc

8.5 classnames优化类名控制

classnames是一个简单的JS库,可以非常方便的通过条件动态控制class类名的显示

现在的问题:字符串的拼接方式不够直观,也容易出错
  • 下载:
    • npm install classnames
  • 引入:
    • import classNames from 'classnames'

  • className(静态的类名, {动态类名: 条件})
    • 动态类名 key 表示要控制的类名,value表示条件,true的时候类名显示

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

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

相关文章

代驾系统源码开发中的用户体验优化:从设计到实现的全方位解析

在当今数字化时代,代驾服务已经成为城市生活中不可或缺的一部分。为了帮助开发者和企业快速搭建代驾服务平台,许多开源的代驾系统源码应运而生。这些源码不仅节省了开发时间,还为进一步的定制化开发提供了坚实的基础。本文将以“开源代驾系统…

docker 安装 oracle11g

#创建oracle11g docker run -d --name myoracle11g -p 1522:1521 akaiot/oracle_11g #登录到oracle,要先docker ps 查看具体的docker id docker exec -it 22222222 bash su root 密码:helowin # 设置环境变量 vi /etc/profile export ORACLE_HOME/home/oracle/ap…

Dubbo源码深度解析(七)

接上一篇博客《Dubbo源码深度解析(六)》,上篇博客主要从服务消费方开始讲起,主要讲:如果类中的属性或者方法,如果被DubboReference注解所修饰,Dubbo是怎么处理的,处理逻辑类似Spring框架提供的Autowired注解…

tomcat相关

一、部署安装tomcat 在10和20上安装tomcat [root10 ~]# dnf install java-1.8.0-openjdk.x86_64 -y #安装java环境 [root10 ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/ #安装并启动tomcat [root10 ~]# ln -s /usr/local/apache-tomcat-9.0.93/ /usr/local/tomcat…

一元函数泰勒展开

若函数f(x)在包含 x 0 x_0 x0​的某个开区间 (a,b)上具有(n 1)阶导数,那么对于任意 x ∈ ( a , b ) x \in (a,b) x∈(a,b),有: f ( x ) ≈ f ( x 0 ) 0 ! f ′ ( x 0 ) 1 ! ( x − x 0 ) f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 ⋅ ⋅ ⋅ f ( n 1 ) ( …

SQLite 删除表

SQLite 删除表 SQLite 是一种轻量级的数据库管理系统,广泛用于各种应用程序中。在数据库管理过程中,删除表是一个常见的操作,用于移除不再需要的数据库表。本文将详细介绍如何在 SQLite 中删除表,包括使用 SQL 命令和图形界面工具的方法。 SQLite 删除表的 SQL 命令 在 …

Linux运维、Windows运维常用命令,保存起来当手册用

文章目录 一、centos基本命令1、升级内核到最新版本2、文件句柄数限制优化3、ssh、sftp、scp等远程命令4、find文件查找5、vi命令 二、windows常用操作 一、centos基本命令 1、升级内核到最新版本 # 1、查看内核版本 [rootlocalhost ~]# cat /etc/centos-release CentOS Linu…

C/C++|经典代码题(动态资源的双重释放与「按值传递、按引用传递、智能指针的使用」)

以下代码中你能看出其存在什么问题&#xff1f;如何修复&#xff0c;能给出几种方法&#xff1f;分别在什么场景下用哪种方法。 #include <iostream>class Buffer {public:Buffer() { std::cout << "Buffer created" << std::endl; }~Buffer() { s…

NC 完全二叉树结点数

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定一棵完全…

社交巨头的下一步:Facebook的未来发展方向

作为全球最大的社交媒体平台之一&#xff0c;Facebook&#xff08;现Meta&#xff09;一直在不断推动其平台的技术创新和战略调整&#xff0c;以适应不断变化的市场需求和用户期望。随着技术的进步和社交媒体环境的演变&#xff0c;Facebook的未来发展方向正在显现出新的趋势和…

Oracle 数据库中的函数REGEXP_LIKE

REGEXP_LIKE 是 Oracle 数据库中的一个函数&#xff0c;它用于基于正则表达式模式匹配字符串。这个函数非常强大&#xff0c;允许你执行复杂的字符串搜索和匹配操作&#xff0c;比标准的 LIKE 语句更加强大和灵活。 语法 REGEXP_LIKE(source_string, pattern [, match_parame…

DC-DC 转换器中的压电谐振器:当前状态和限制

在小体积和高频下提高功率密度并减小电感器和变压器的尺寸是DC-DC转换器设计中的一大挑战。为了克服这些困难&#xff0c;压电谐振器&#xff08;PR&#xff09;通过利用潜在的压电效应&#xff0c;以振动模式而不是电模式存储能量。 即使 PR 的使用在效率和功率密度方面改进了…

轻松创作高质量的AI音乐——Suno API

Suno 歌曲生成 API 对接指南 随着人工智能技术的飞速发展&#xff0c;各类 AI 程序已如雨后春笋般涌现。AI 不再是遥不可及的存在&#xff0c;它的身影深入了人类工作与生活的每一个角落。其应用领域也愈加广泛&#xff0c;从初期的写作&#xff0c;到现如今的医疗、教育&…

【数据结构-距离和】力扣2602. 使数组元素全部相等的最少操作次数

给你一个正整数数组 nums 。 同时给你一个长度为 m 的整数数组 queries 。第 i 个查询中&#xff0c;你需要将 nums 中所有元素变成 queries[i] 。你可以执行以下操作 任意 次&#xff1a; 将数组里一个元素 增大 或者 减小 1 。 请你返回一个长度为 m 的数组 answer &#x…

WUP-MY-LABEL-PRINTER 旻佑热敏打印机标签打印uniapp插件使用说明

插件地址&#xff1a;WUP-MY-LABEL-PRINTER 旻佑热敏打印机标签打印安卓库 简介 本插件主要用于旻佑热敏打印机打印标签&#xff0c;不支持票据打印。适用于旻佑的各型支持标签打印的热敏打印机。本插件开发时使用的打印机型号为MY-805嵌入式面板打印机&#xff0c;其他型号请…

C的动态内存管理 free()和malloc()的简单实现——free()根据内存地址便知释放内存的空间大小(原理详解)

malloc与free malloc 分配的内存是未初始化的&#xff0c;其中的字节内容是不确定的&#xff08;可能是随机值&#xff09;。 如果内存分配失败&#xff0c;malloc 返回一个空指针 NULL&#xff0c;可以通过检查返回值来判断是否分配成功。 void* malloc (size_t size); cal…

Linux目录结构及基础查看命令和命令模式

Linux目录结构及基础查看命令和命令模式 1.树形目录结构根目录 所有分区、目录、文件等的位置起点整个树形目录结构中&#xff0c;使用独立的一个“/”表示 常见的子目录 /root 管理员的宿主(家)目录 /home/xxx 普通用户的家目录 /bin 命令文件目录&#xff0c;存放所…

逻辑回归解密:原理、公式和优化全解析

文章目录 一、 前言二、逻辑回归的原理和基本公式1. 逻辑回归的原理核心函数&#xff1a;Sigmoid函数 2. 逻辑回归模型3. 梯度上升法参数估计&#xff1a;最大似然估计对数似然函数求导过程参数更新 4. 梯度下降法参数估计&#xff1a;最小化损失函数逻辑回归的负对数似然函数梯…

Milvus向量数据库-内存中索引简介

以下内容是自己在学习Milvus向量数据库时&#xff0c;在Milvus官方网站文档库中对索引的学习整理和翻译&#xff0c;通过自己和借助翻译软件进行了理解整合翻译&#xff0c;有可能有一些地方理解整理的不到位&#xff0c;还望大家理解。 一、内存中索引 本文列出了 Milvus 支…

Linux压缩和解压

目录 压缩和解压类 gzip/gunzip指令 zip/unzip指令 tar指令 压缩和解压类 gzip/gunzip指令 gzip用于压缩文件&#xff0c;gunzip用于解压缩文件。 解压后去掉了gz的后缀。 zip/unzip指令 ​​​​​​​ 将文件压缩后发给别人&#xff0c;别人再解压。 将整个文件压…