前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React 播客专栏 Vol.5|从“显示”到“消失”:打造你的第一个交互式 Alert 组件!

React 播客专栏 Vol.5|从“显示”到“消失”:打造你的第一个交互式 Alert 组件!

作者头像
前端达人
发布于 2025-05-07 07:14:40
发布于 2025-05-07 07:14:40
9500
代码可运行
举报
文章被收录于专栏:前端达人前端达人
运行总次数:0
代码可运行

👋 欢迎回到《前端达人 · 播客书单》第 5 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听

📌 今天我们不再停留在看代码,而是动手实现一个真正的 React 组件:带关闭功能的 Alert 提示框。如果你已经知道什么是 JSX、Props 和 State,那么今天这期内容将帮助你把这些拼图拼到一起!

🔧 第一步:做一个基本的 Alert 组件

还记得 React 的核心逻辑吗?组件就是一个函数,返回 JSX,就能控制 UI 输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function Alert() {
  return (
    <div>
      <div>
        <span role="img" aria-label="Warning"></span>
        <span>Oh no!</span>
      </div>
      <div>Something isn't quite right ...</div>
    </div>
  );
}

💡 提示:

  • JSX 里 class 叫 className。
  • 图标加上 role="img"aria-label,提升无障碍支持。
  • 组件名必须大写!不然 React 会把它当成原生 HTML 标签。

🎨 第二步:加点“定制味道” —— 用 Props 做组件参数化

Alert 不应该只显示“⚠ Oh no!” 吧?我们来让它变得灵活:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export function Alert({ type = "information", heading, children }) {
  return (
    <div>
      <div>
        <span role="img" aria-label={type === "warning" ? "Warning" : "Info"}>
          {type === "warning" ? "⚠" : "ℹ️"}
        </span>
        <span>{heading}</span>
      </div>
      <div>{children}</div>
    </div>
  );
}

👀 使用方式变得很灵活:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Alert type="information" heading="Success">
  Everything is really good!
</Alert>

✔️ 小技巧:

  • children 就是你写在组件标签之间的内容;
  • type, heading, children 都是通过 Props 来配置;
  • 解构 + 默认值写法,让代码更优雅。

🖱️ 第三步:响应用户操作 —— 加个“关闭按钮”

用户想关掉 Alert 怎么办?来,我们加个 closable 属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{closable && (
  <button aria-label="Close">
    <span role="img" aria-label="Close"></span>
  </button>
)}

这样就能控制这个按钮是否显示了!

在使用时只要这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Alert type="warning" heading="Oops" closable>
  Something went wrong!
</Alert>

✅ 注意:

  • closable 只要写上就等于 true
  • 条件渲染用 &&,真值就渲染,假值就忽略。

📦 第四步:组件记住“关闭”状态 —— 用 State 控制可见性

让按钮真正“管用”,我们得用上 useState

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useState } from"react";

exportfunction Alert({ type = "info", heading, children, closable }) {
const [visible, setVisible] = useState(true);

if (!visible) returnnull;

const handleCloseClick = () => setVisible(false);

return (
    <div>
      <div>
        <span>{type === "warning" ? "⚠" : "ℹ️"}</span>
        <span>{heading}</span>
      </div>
      <div>{children}</div>
      {closable && (
        <button onClick={handleCloseClick}></button>
      )}
    </div>
  );
}

🎯 一句话总结:点一下关闭按钮,visible 变成 false,Alert 消失!

📘 第五步:用一用书后小测验题,检验你的理解:

  • React 组件为什么要以大写开头?
  • JSX 中怎么嵌入变量?
  • Props 和 State 的区别是啥?
  • 什么是条件渲染?

如果你都能答出来,那你真的已经掌握了本节核心!

#React #前端播客 #前端达人 #React播客专栏

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端达人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React 播客专栏 Vol.13|样式不难搞,Tailwind CSS 与 SVG 实战入门
👋 欢迎回到《前端达人 · React 播客书单》第 13 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听
前端达人
2025/05/19
1230
React 播客专栏 Vol.13|样式不难搞,Tailwind CSS 与 SVG 实战入门
React 播客专栏 Vol.18|React 第二阶段复习 · 样式与 Hooks 全面整合
今天,我们将对第二阶段的内容进行系统复盘,重点是两个关键词:样式 与 Hooks。
前端达人
2025/06/09
700
React 播客专栏 Vol.18|React 第二阶段复习 · 样式与 Hooks 全面整合
播客专栏 Vol.3|Props 到底是啥?让你的组件“听话又灵活”的秘密武器!
上一期,我们聊了 React 的核心语法 —— JSX,揭开了“看似 HTML、实则 JavaScript”的魔法面纱。今天,我们正式进入组件的下一个重点:“Props”。
前端达人
2025/05/05
1290
播客专栏 Vol.3|Props 到底是啥?让你的组件“听话又灵活”的秘密武器!
React 播客专栏 Vol.10|你以为是复习?其实是 TypeScript + React 真正上手的开始!
👋 欢迎回到《前端达人 · React 播客书单》第 10 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听
前端达人
2025/05/14
470
React 播客专栏 Vol.10|你以为是复习?其实是 TypeScript + React 真正上手的开始!
React 播客专栏 Vol.6|TypeScript 是什么?为啥写 React 要加它?
👋 欢迎回到《前端达人 · React 播客书单》第 6 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听
前端达人
2025/05/08
1200
React 播客专栏 Vol.6|TypeScript 是什么?为啥写 React 要加它?
React 播客专栏 Vol.15|彻底搞懂 useReducer 是个啥?
今天我们来学习一个比 useState 更“工程化”的 Hook:useReducer。
前端达人
2025/05/22
890
React 播客专栏 Vol.15|彻底搞懂 useReducer 是个啥?
React 播客专栏 Vol.11|Plain CSS 如何在 React 中优雅登场?
👋 欢迎回到《前端达人 · React 播客书单》第 11 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听
前端达人
2025/05/15
530
React 播客专栏 Vol.11|Plain CSS 如何在 React 中优雅登场?
《精通react/vue组件设计》之实现一个健壮的警告提示(Alert)组件
本文是笔者写组件设计的第七篇文章, 今天带大家实现一个自带主题且可关闭的Alert组件, 该组件在诸如Antd或者elementUI等第三方组件库中都会出现,主要用来提供系统的用户反馈.
徐小夕
2020/02/19
1.1K0
《精通react/vue组件设计》之配合React Portals实现一个功能强大的抽屉(Drawer)组件
本文是笔者写组件设计的第六篇文章,内容依次从易到难,今天会用到react的高级API React Portals,它也是很多复杂组件必用的方法之一. 通过组件的设计过程,大家会接触到一个完成健壮的组件设计思路和方法,也能在实现组件的过程逐渐对react/vue的高级知识和技巧有更深的理解和掌握,并且在企业实际工作做游刃有余.
徐小夕
2020/02/19
1.8K0
React 播客专栏 Vol.12|告别样式混乱!两种方式让你的 React 样式更专业
👋 欢迎回到《前端达人 · React 播客书单》第 12 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听
前端达人
2025/05/18
770
React 播客专栏 Vol.12|告别样式混乱!两种方式让你的 React 样式更专业
React 标签组件 Tag
在现代Web开发中,标签(Tag)是一种常见的UI元素。它通常用于分类、标记或表示状态等场景。React作为一款流行的前端框架,提供了多种方式来创建和管理标签组件。本文将由浅入深地介绍React标签组件常见问题、易错点及如何避免。
Jimaks
2024/12/25
2490
React 播客专栏 Vol.16|useRef 和 useMemo 是干嘛的?
今天我们来聊聊两个非常实用但经常被误解的 React Hook:useRef 和 useMemo。
前端达人
2025/05/27
980
React 播客专栏 Vol.16|useRef 和 useMemo 是干嘛的?
WebComponent魔法堂:深究Custom Element 之 面向痛点编程
前言  最近加入到新项目组负责前端技术预研和选型,一直偏向于以Polymer为代表的WebComponent技术线,于是查阅各类资料想说服老大向这方面靠,最后得到的结果是:"资料99%是英语无所谓,最重要是UI/UX上符合要求,技术的事你说了算。",于是我只好乖乖地去学UI/UX设计的事,木有设计师撑腰的前端是苦逼的:(嘈吐一地后,还是挤点时间总结一下WebComponent的内容吧,为以后作培训材料作点准备。 浮在水面上的痛 组件噪音太多了!  在使用Bootstrap的Modal组件时,我们不免要Ctr
^_^肥仔John
2018/01/18
9180
WebComponent魔法堂:深究Custom Element 之 面向痛点编程
React组件库封装初探--Modal
top: 0; right: 0; bottom: 0; left: 0; z-index: 1000;
keyWords
2019/04/18
5.3K2
React 实现一个markdown[2]
theme: channing-cyan highlight: a11y-light
用户4793865
2023/02/03
1.2K0
如何用120行代码,实现一个交互完整的拖拽上传组件?
于是我又用React Hooks 重写了一版,除CSS的代码总数 120行。 效果如下:
前端劝退师
2019/08/29
2.1K0
如何用120行代码,实现一个交互完整的拖拽上传组件?
Qwik带来简洁高效的Astro开发
Paul Scanlon通过代码示例比较了React和Qwik,他认为Qwik值得作为React的替代品进行探索。
云云众生s
2024/03/28
3030
《精通react/vue组件设计》之手把手实现一个轻量级可扩展的模态框(Modal)组件
本文是笔者写组件设计的第九篇文章, 今天带大家实现一个轻量级且可灵活配置组合的模态框(Modal)组件, 该组件在诸如Antd或者elementUI等第三方组件库中都会出现,主要用来提供系统的用户反馈.
徐小夕
2020/02/19
2.8K0
《精通react/vue组件设计》之手把手实现一个轻量级可扩展的模态框(Modal)组件
React 实战
只需要保证,在同一个数组中的兄弟元素之间的 key 是唯一的。而不需要在整个应用程序甚至单个组件中保持唯一。
王秀龙
2021/08/26
1.3K0
React 实战
浅谈 React 组件设计
前端组件化一直是老生常谈的话题,在前面介绍 React 的时候我们已经提到过 React 的一些优势,今天则是带大家了解一下组件设计原则。
玖柒的小窝
2021/10/22
7170
推荐阅读
相关推荐
React 播客专栏 Vol.13|样式不难搞,Tailwind CSS 与 SVG 实战入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验