当前位置: 首页 > article >正文

React 播客专栏 Vol.18|React 第二阶段复习 · 样式与 Hooks 全面整合

视频版

🎙 欢迎回到《前端达人 · React播客书单》第 18 期。

今天,我们将对第二阶段的内容进行系统复盘,重点是两个关键词:样式 与 Hooks

  • 样式,决定组件“长什么样”

  • Hooks,决定组件“怎么动起来”

我们不但会回顾 CSS Modules、Emotion、Tailwind 的使用场景,还会穿插 useStateuseEffectuseRef 等核心 Hooks 的使用技巧,并在最后带来一个实战组件:可折叠面板 Accordion,来一次彻底的知识整合。

📦 第一部分:样式方案复习

✅ Plain CSS & CSS Modules

// 传统方式
import './App.css'// 模块化方案
import styles from './Button.module.css'
<button className={styles.primary}>Submit</button>

CSS Modules 优势:

  • 避免样式全局污染

  • 类名自动哈希化,适合组件封装

  • Create React App 默认支持

适用场景:中等规模组件项目,团队需要一定风格约束。

✅ Emotion:主流 CSS-in-JS 方案

/** @jsxImportSource @emotion/react */
import { css } from '@emotion/react'const style = css`background: #f0f0f0;padding: 16px;
`

优势:

  • 样式与逻辑写在一起,更具组件一致性

  • 允许使用 props 动态控制样式

  • 天然适配 TypeScript 类型系统

适用场景:组件库、设计系统 或 需要逻辑控制样式的复杂交互组件

✅ Tailwind CSS:原子化的实用流派

<button className="bg-indigo-600 text-white px-4 py-2 rounded">Click me
</button>

优势:

  • 无需命名 class,写一个类就是一个功能

  • class 命名语义明确、设计一致

  • 配合设计 token、组件库使用,提升协作效率

适用场景:页面开发、追求一致性的中大型前端项目

⚙️ 第二部分:Hooks 系统复盘

✅ useState vs useReducer

const [count, setCount] = useState(0)

适用于简单状态(数字、布尔值、字符串)

const [state, dispatch] = useReducer(reducer, initialState)

适用于复杂状态逻辑,如:

  • 多个字段一起更新

  • 状态变更依赖 action 类型

  • 希望将状态逻辑集中统一管理

📌 记住一句话:状态逻辑复杂,就用 useReducer

✅ useEffect:副作用处理专家

useEffect(() => {fetchData()return () => cleanup()
}, [dependency])

掌握 3 种依赖数组写法:

依赖数组

执行时机

[]

组件首次挂载

[var]

var 变化时执行

空(不填)

每次渲染后执行

✅ 性能与引用类 Hooks:useRef / useMemo / useCallback

Hook

场景

useRef

缓存 DOM 或值,不触发重渲染

useMemo

缓存计算结果,避免重复运算

useCallback

缓存函数引用,优化子组件渲染

const total = useMemo(() => calculate(items), [items])
const handler = useCallback(() => doSomething(), [items])

🧪 第三部分:实战组件构建

🎯 目标:可折叠面板(Accordion)

功能说明:

  • 点击按钮,内容展开或收起

  • 内容高度自动适配,支持过渡动画

  • 无需引入三方库,完全自定义实现

💡 技术实现拆解

功能点

技术方案

状态控制

useState

 管理 isExpanded

DOM 尺寸测量

useRef

 获取 scrollHeight

触发动画

useEffect

 控制 style.height

函数优化

useCallback

 记忆点击事件

样式实现

Tailwind + transition 类名

🧱 精简实现代码(参考)

const [isExpanded, setIsExpanded] = useState(false)
const contentRef = useRef<HTMLDivElement>(null)useEffect(() => {const el = contentRef.currentif (!el) returnel.style.height = isExpanded ? `${el.scrollHeight}px` : '0px'
}, [isExpanded])

配合样式:

<div className="overflow-hidden transition-all duration-300" ref={contentRef}><p className="p-4">这里是内容区域</p>
</div>

📌 学习建议 & 调试技巧

  • 💻 React DevTools:观察状态、props 变化最强工具

  • 🧠 错误提示别忽略,TS 的类型报错=最佳调试助手

  • 📘 文档永远是第一资源:React Hooks 官方文档

✅ 总结与展望

已掌握

意义

样式模块化思路

让组件更美观、可维护

Hooks 使用模式

让组件更具行为逻辑和性能优化能力

实战练习能力

把知识点真正用于构建功能型组件

🔮 下一步内容:进入第三阶段

📌 主题:React 路由与远程数据处理

我们将学习:

  • react-router-dom 的现代写法

  • 动态路由参数与页面懒加载

  • API 数据请求与缓存逻辑

#React     #React播客     #前端播客     #前端达人     #TypeScript    

相关文章:

React 播客专栏 Vol.18|React 第二阶段复习 · 样式与 Hooks 全面整合

视频版 &#x1f399; 欢迎回到《前端达人 React播客书单》第 18 期。 今天&#xff0c;我们将对第二阶段的内容进行系统复盘&#xff0c;重点是两个关键词&#xff1a;样式 与 Hooks。 样式&#xff0c;决定组件“长什么样”Hooks&#xff0c;决定组件“怎么动起来” 我们不但…...

从认识AI开始-----解密LSTM:RNN的进化之路

前言 我在上一篇文章中介绍了 RNN&#xff0c;它是一个隐变量模型&#xff0c;主要通过隐藏状态连接时间序列&#xff0c;实现了序列信息的记忆与建模。然而&#xff0c;RNN在实践中面临严重的“梯度消失”与“长期依赖建模困难”问题&#xff1a; 难以捕捉相隔很远的时间步之…...

leetcode0513. 找树左下角的值-meidum

1 题目&#xff1a;找树左下角的值 官方标定难度&#xff1a;中 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7]…...

命令行式本地与服务器互传文件

文章目录 1. 背景2. 传输方式2.1 SCP 协议传输2.2 SFTP 协议传输 3. 注意 命令行式本地与服务器互传文件 1. 背景 多设备协同工作中&#xff0c;因操作系统的不同&#xff0c;我们经常需要将另外一个系统中的文件传输到本地PC进行浏览、编译。多设备文件互传&#xff0c;在嵌入…...

MPTCP 聚合吞吐

只破不立假把式&#xff0c;前面连续喷 MPTCP 是个错误&#xff0c;今天说说如何克服。 到底谁在阻碍 MPTCP 聚合吞吐一定要搞清楚&#xff0c;是算法硬伤&#xff0c;是数据不足。前文说过&#xff0c;将一个窗口内的数据多路径 spray 有损吞吐&#xff0c;想要聚合吞吐&…...

JavaScript性能优化实战技术文章大纲

代码层面优化 避免全局变量污染&#xff0c;使用let和const替代var&#xff0c;减少作用域链查找开销。 // 反例&#xff1a;全局变量 var globalVar 低效;// 正例&#xff1a;局部变量 function optimized() {const localVar 高效; }减少DOM操作&#xff0c;合并多次操作或…...

LabelImg: 开源图像标注工具指南

LabelImg: 开源图像标注工具指南 1. 简介 LabelImg 是一个图形化的图像标注工具&#xff0c;使用 Python 和 Qt 开发。它是目标检测任务中最常用的标注工具之一&#xff0c;支持 PASCAL VOC 和 YOLO 格式的标注输出。该工具开源、免费&#xff0c;并且跨平台支持 Windows、Lin…...

计算机网络 TCP篇常见面试题总结

目录 TCP 的三次握手与四次挥手详解 1. 三次握手&#xff08;Three-Way Handshake&#xff09; 2. 四次挥手&#xff08;Four-Way Handshake&#xff09; TCP 为什么可靠&#xff1f; 1. 序列号与确认应答&#xff08;ACK&#xff09; 2. 超时重传&#xff08;Retransmis…...

树欲静而风不止,子欲养而亲不待

2025年6月2日&#xff0c;13~26℃&#xff0c;一般 待办&#xff1a; 物理2 、物理 学生重修 职称材料的最后检查 教学技能大赛PPT 遇见&#xff1a;使用通义创作了一副照片&#xff0c;很好看&#xff01;都有想用来创作自己的头像了&#xff01; 提示词如下&#xff1a; A b…...

Kotlin中的::操作符详解

Kotlin提供了::操作符&#xff0c;用于创建对类或对象的成员(函数、属性)的引用。这种机制叫做成员引用(Member Reference)。这是Kotlin高阶函数和函数式编程的重要组成部分。 简化函数传递 在Java中&#xff0c;我们这样传方法&#xff1a; list.forEach(item -> System.…...

【Linux】(1)—进程概念-③Linux进程概念与PCB

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Linux进程概念与PCB 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 什么是进程&#xff1f; 进程可以理解为"正在执行的…...

神经网络中的梯度消失与梯度爆炸

在深层次的神经网络中很容易出现梯度消失与梯度爆炸的问题。这篇博客就详细介绍一下为什么会产生梯度消失与梯度爆炸的问题&#xff0c;以及如何解决。 首先梯度是什么 类比快递员送包裹&#xff1a; 神经网络训练时&#xff0c;需要根据预测错误&#xff08;损失函数&#…...

深入详解编译与链接:翻译环境和运行环境,翻译环境:预编译+编译+汇编+链接,运行环境

目录 一、翻译环境和运行环境 二、翻译环境&#xff1a;预编译编译汇编链接 &#xff08;一&#xff09;预处理&#xff08;预编译&#xff09; &#xff08;二&#xff09;编译 1、词法分析 2、语法分析 3、语义分析 &#xff08;三&#xff09;汇编 &#xff08;四&…...

系统架构设计师案例分析----经典架构风格特点

这次的考试太大意了&#xff0c;很多知识点有印象&#xff0c;但不能完整的描述出来。今年11月的考试&#xff0c;要认真备考&#xff0c;从现在开始&#xff0c;把案例分析和论文内容整理出来&#xff0c;一是方便记忆&#xff0c;二是和各位考一起分享。欢迎各位拍砖。 这段…...

基于大模型的急性乳腺炎全病程风险预测与综合治疗方案研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与技术路线 二、急性乳腺炎概述 三、大模型技术原理与应用现状 3.1 大模型基本原理 3.2 在医疗领域的应用案例 3.3 选择大模型用于急性乳腺炎预测的依据 四、大模型预测急性乳腺炎各阶段风险 4.…...

HTML实战:爱心图的实现

设计思路 使用纯CSS创建多种风格的爱心 添加平滑的动画效果 实现交互式爱心生成器 响应式设计适应不同设备 优雅的UI布局和色彩方案 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <meta nam…...

定时任务:springboot集成xxl-job-core(二)

定时任务实现方式&#xff1a; 存在的问题&#xff1a; xxl-job的原理&#xff1a; 可以根据服务器的个数进行动态分片&#xff0c;每台服务器分到的处理数据是不一样的。 1. 多台机器动态注册 多台机器同时配置了调度器xxl-job-admin之后&#xff0c;执行器那里会有多个注…...

DeviceNET转EtherCAT网关:医院药房自动化的智能升级神经中枢

在现代医院药房自动化系统中&#xff0c;高效、精准、可靠的设备通信是保障患者用药安全与效率的核心。当面临既有支持DeviceNET协议的传感器、执行器&#xff08;如药盒状态传感器、机械臂限位开关&#xff09;需接入先进EtherCAT高速实时网络时&#xff0c;JH-DVN-ECT疆鸿智能…...

一:UML类图

一、类的设计 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 学习设计模式的第一步是看懂UML类图,类图能直观的表达类、对象之间的关系,这将有助于后续对代码的编写。 类图在软件设计及应用框架前期设计中是不可缺少的一部分,它的主要成分包括:类名、…...

数据库三范式的理解

最近在学习数据库知识&#xff0c;发现 “数据库三范式” 这个概念特别重要&#xff0c;今天就来和大家分享一下我的理解,欢迎各位指正 一、数据库三范式是什么&#xff1f; 数据库三范式是为了让数据库结构更合理、减少数据冗余、提高数据完整性的设计规则。 第一范式&…...

Java 中 MySQL 索引深度解析:面试核心知识点与实战

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Java 中 MySQL 索引深度解析&#xff1a;面试…...

DeepSeek 部署中的常见问题及解决方案

技术文章大纲&#xff1a;DeepSeek 部署中的常见问题及解决方案 部署环境配置问题 硬件兼容性问题&#xff08;如GPU驱动版本不匹配&#xff09; 操作系统及依赖库版本冲突&#xff08;CUDA/cuDNN版本&#xff09; Python虚拟环境配置错误 模型加载与初始化失败 预训练模型…...

Nvidia Intern 笔试回忆

Nvidia intern compute arch 的笔试回忆&#xff0c;感觉强度拉满&#xff0c;两个半小时6道编程题&#xff0c;难度堪比ACM&#xff0c;需要自己写好输入输出&#xff08;ACM好歹有个签到题 &#xff09;&#xff0c;图论的题比较多&#xff0c;跟大厂面试题不是同一level...…...

鸿蒙OS基于UniApp的WebRTC视频会议系统实践:从0到1的HarmonyOS适配之路#三方框架 #Uniapp

基于UniApp的WebRTC视频会议系统实践&#xff1a;从0到1的HarmonyOS适配之路 引言 在移动互联网时代&#xff0c;实时音视频通讯已成为各类应用的标配功能。本文将结合我在某大型企业协同办公项目中的实战经验&#xff0c;详细讲解如何使用UniApp框架开发一个支持鸿蒙系统的W…...

设计模式之结构型:装饰器模式

装饰器模式(Decorator Pattern) 定义 装饰器模式是一种​​结构型设计模式​​&#xff0c;允许​​动态地为对象添加新功能​​&#xff0c;而无需修改其原始类。它通过将对象包装在装饰器类中&#xff0c;以​​组合代替继承​​&#xff0c;实现功能的灵活扩展(如 Java I/O …...

mysql分布式教程

MySQL 主从复制 主从复制原理&#xff1a;MySQL 主从复制是指数据可以从一个 MySQL 数据库服务器主节点复制到一个或多个从节点。主库将写操作记录在二进制日志文件中&#xff0c;从库的 IO 线程请求读取主库的二进制日志并写入中继日志&#xff0c;然后 SQL 线程执行中继日志中…...

MySQL安装及启用详细教程(Windows版)

MySQL安装及启用详细教程&#xff08;Windows版&#xff09; &#x1f4cb; 概述 本文档将详细介绍MySQL数据库在Windows系统下的下载、安装、配置和启用过程。 &#x1f4e5; MySQL下载 官方下载地址 官方网站: https://dev.mysql.com/downloads/社区版本: https://dev.my…...

Vue3.5 企业级管理系统实战(二十一):菜单权限

有了菜单及角色管理后&#xff0c;我们还需要根据用户访问的token&#xff0c;去获取用户信息&#xff0c;根据用户的角色信息&#xff0c;拉取所有的菜单权限&#xff0c;进而生成左侧菜单树数据。 1 增加获取用户信息 api 在 src/api/user.ts 中&#xff0c;添加获取用户信…...

kafka幂等生产者和事务生产者区别

#作者&#xff1a;张桐瑞 文章目录 消息交付可靠性保障什么是幂等性&#xff08;Idempotence&#xff09;&#xff1f;幂等性Producer事务事务型Producer 消息交付可靠性保障 所谓的消息交付可靠性保障&#xff0c;是指Kafka对Producer和Consumer要处理的消息提供什么样的承诺…...

【HarmonyOS Next之旅】DevEco Studio使用指南(二十九) -> 开发云数据库

目录 1 -> 开发流程 2 -> 创建对象类型 3 -> 添加数据条目 3.1 -> 手动创建数据条目文件 3.2 -> 自动生成数据条目文件 4 -> 部署云数据库 1 -> 开发流程 云数据库是一款端云协同的数据库产品&#xff0c;提供端云数据的协同管理、统一的数据模型和…...