0

0

如何在 React 中动态添加列表项(li)元素

碧海醫心

碧海醫心

发布时间:2026-02-21 13:44:01

|

332人浏览过

|

来源于php中文网

原创

如何在 React 中动态添加列表项(li)元素

本文详解如何使用 React 的 useState Hook 实现点击按钮后,将两个输入框的值组合并动态渲染为 列表项,强调状态管理、列表渲染与 key 的正确使用。

本文详解如何使用 react 的 usestate hook 实现点击按钮后,将两个输入框的值组合并动态渲染为 `

  • ` 列表项,强调状态管理、列表渲染与 key 的正确使用。

    在 React 应用中,动态向列表(如

      )中添加
    • 元素,本质是响应式地更新 UI 状态,而非直接操作 DOM。核心在于:用状态(useState)存储待渲染的数据,再通过 map() 将数据映射为 JSX 元素,并确保每个元素拥有稳定唯一的 key。

      以下是一个完整、可运行的实现方案:

      ✅ 正确做法:用数组状态管理列表项

      首先,声明一个用于存储所有待显示条目的数组状态:

      const [values, setValues] = useState([]);

      该数组每一项代表一个

    • 的文本内容(例如 "Groceries 45")。当用户点击“Add Expense”按钮时,我们应将当前两个输入框的值拼接后追加到该数组中:
      function handleClick() {
        const newItem = `${firtValue.trim()} ${secValue.trim()}`;
        if (newItem.trim()) { // 防止空条目
          setValues(prev => [...prev, newItem]);
        }
      }

      ⚠️ 注意:使用函数式更新 setValues(prev => [...prev, newItem]) 更安全,避免闭包导致的状态陈旧问题;同时添加空值校验,提升用户体验。

      接着,在 JSX 中渲染列表时,不要调用函数(如 {listOfLi()}),而应直接渲染已计算好的 JSX 数组:

      const listOfLi = values.map((value, index) => (
        <li key={index}>{value}</li>
      ));
      // 在返回 JSX 中:
      <ul>{listOfLi}</ul>

      ✅ 关键点:key 必须存在且唯一。此处使用 index 可行(因条目仅追加、不重排/删除),但若后续需支持编辑或删除,建议改用唯一 ID(如 crypto.randomUUID() 或时间戳+索引组合)。

      ? 修复原代码中的典型错误

      • ❌ listOfLi() 是一个函数,但被直接写成 {listOfLi}(未调用)→ 渲染的是函数对象,非 JSX;
      • ❌ handleClick 中仅调用 listOfLi(),未触发状态更新 → UI 不会重新渲染;
      • ❌ 输入状态更新逻辑混乱(如 hadnleChane / hadnleChan 拼写错误、职责错位)→ 已统一修正为语义清晰的 setFirtValue / setSecValue。

      ? 完整优化后的关键片段(精简版)

      // 状态声明
      const [firtValue, setFirtValue] = useState("");
      const [secValue, setSecValue] = useState("");
      const [values, setValues] = useState([]);
      
      // 输入处理(修正命名与逻辑)
      const handleItemChange = (e) => setFirtValue(e.target.value);
      const handleAmountChange = (e) => setSecValue(e.target.value);
      
      // 添加条目
      const handleClick = () => {
        const text = `${firtValue.trim()} ${secValue.trim()}`;
        if (text.trim()) {
          setValues(prev => [...prev, text]);
          // 可选:清空输入框
          setFirtValue("");
          setSecValue("");
        }
      };
      
      // 列表渲染
      const listItems = values.map((item, i) => (
        <li key={i}>{item}</li>
      ));

      在 JSX 中使用:

      <div className="add-item">Item
        <input type="text" onChange={handleItemChange} placeholder="Add Item" />
      </div>
      <div className="add-item">Amount
        <input type="number" onChange={handleAmountChange} placeholder="Add Amount" />
      </div>
      <button onClick={handleClick}>Add Expense</button>
      
      <ul>{listItems}</ul>

      ? 总结与最佳实践

      • 状态即数据源:所有动态内容必须由 React 状态驱动;
      • 列表渲染必带 key:即使使用索引,也要确保其在列表生命周期内稳定;
      • 避免副作用式 DOM 操作:不使用 document.createElement 或 innerHTML;
      • 输入后及时清理(可选):提升交互流畅性;
      • 添加基础校验:防止空字符串、NaN 等无效数据进入列表。

      掌握这一模式,你不仅能实现

    • 动态添加,还能轻松扩展为 Todo 列表、购物车、日志面板等常见功能模块。
  • 热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    js 字符串转数组
    js 字符串转数组

    js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

    595

    2023.08.03

    js截取字符串的方法
    js截取字符串的方法

    js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

    217

    2023.09.04

    java基础知识汇总
    java基础知识汇总

    java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

    1555

    2023.10.24

    字符串介绍
    字符串介绍

    字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

    641

    2023.11.24

    java读取文件转成字符串的方法
    java读取文件转成字符串的方法

    Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

    986

    2024.03.22

    php中定义字符串的方式
    php中定义字符串的方式

    php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

    939

    2024.04.29

    go语言字符串相关教程
    go语言字符串相关教程

    本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

    186

    2025.07.29

    c++字符串相关教程
    c++字符串相关教程

    本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

    89

    2025.08.07

    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

    本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

    796

    2026.02.13

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    React 教程
    React 教程

    共58课时 | 5.3万人学习

    国外Web开发全栈课程全集
    国外Web开发全栈课程全集

    共12课时 | 1万人学习

    React核心原理新老生命周期精讲
    React核心原理新老生命周期精讲

    共12课时 | 1.1万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号