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

React 腾讯面试手写题

题目如下:

用 React 和 JS 实现一个组件,组件分为左右两块
左侧模块:展示可选列表,如 [1,2,3,4,5],每一项是一个 checkbox,可以勾选和取消
勾选时,右侧模块会展示已选项的列表,并且每项旁边有个删除按钮,点击删除后,左侧对应项也会取消勾选


思路

这个题核心就是双向数据绑定,题中只有一个要管理的状态——右栏列表 selectedItems

点击左栏某一项 item 的勾选框,判断右栏中是否存在 item,若存在,则右栏移除 item;反之则添加 item。然后修改左栏的勾选状态 checked

右栏点击删除按钮时,使用列表的 filter 方法更新列表

在这里插入图片描述


代码

App.jsx

import { useState } from "react";
import reactLogo from "./assets/react.svg";
import viteLogo from "/vite.svg";
import "./App.css";function App() {const [options] = useState([1, 2, 3, 4, 5]);const [selectedItems, setSelectedItems] = useState([]);function changeCheckbox(item) {if (selectedItems.includes(item)) {setSelectedItems(selectedItems.filter((id) => id !== item));} else {setSelectedItems([...selectedItems, item]);}}function deleteItem(id) {setSelectedItems(selectedItems.filter((item) => item !== id));}return (<><div className="container"><div className="left">{options.map((item) => {return (<div className="checkbox-item">{item}<input type="checkbox"className="check"checked={selectedItems.includes(item)}onChange={() => changeCheckbox(item)} /></div>);})}</div><div className="right">{selectedItems.map((item) => {return (<div className="selected-item"><span>{item} </span><button className="delete-btn"onClick={()=>deleteItem(item)}>删除</button></div>);})}</div></div></>);
}export default App;

App.css

#root {max-width: 1280px;margin: 0 auto;padding: 2rem;
}.container {display: flex;
}.left, .right {border: 1px solid #ddd;border-radius: 8px;width: 200px;
}
.delete-btn {background-color: orange;color: white;border: none;border-radius: 4px;padding: 0.25rem 0.5rem;cursor: pointer;font-size: 0.8rem;
}
http://www.lryc.cn/news/618955.html

相关文章:

  • Photoshop软件打开WebP文件格的操作教程
  • 第六十四章:AI的“觅食”之路:数据采集器设计与多源数据获取
  • Android性能优化:架构层面的性能考量
  • Android 引导式访问(屏幕固定 Screen Pinning)完整指南
  • CPPIO流
  • 北京JAVA基础面试30天打卡08
  • 信号反射规律
  • [激光原理与应用-254]:理论 - 几何光学 - 自动对焦的原理
  • W5500之“socket.c”中的相关函数
  • Vue接口平台小功能——发送报告到飞书
  • AWT与Swing深度对比:架构差异、迁移实战与性能优化
  • Unity数据可视化图表插件XCharts
  • Elasticsearch JS 自定义 ConnectionPool / Connection / Serializer、敏感信息脱敏与 v8 平滑迁移
  • python调研本地 DeepSeek API的例子
  • NLP—词向量转换评论学习项目分析真实案例
  • 【Vue 3 响应式系统深度解析:reactive vs ref 全面对比】
  • 【实时Linux实战系列】基于RFID的实时资产追踪系统
  • 当赞美来敲门:优雅接纳的艺术
  • 21.Linux HTTPS服务
  • GitHub的简单使用方法----(5)
  • 文件IO的学习
  • 论文Review 激光动态物体剔除 Dynablox | RAL2023 ETH MIT出品!
  • web前端第二次作业
  • 5G专网项目外场常见业务测试指南(六)-PingInfoView
  • 衡石HENGSHI SENSE6.0亮点功能-应用创作
  • 衡量机器学习模型的指标
  • HDI 线路板,如何突破普通线路板局限?
  • 基恩士3D视觉用于ABB机器人的KeyenceRobotVisionSetup.sys系统模块程序解析(九、KeyAbsMove)
  • centos 7 如何安装 ZipArchive 扩展
  • 百胜软件×华为云联合赋能,“超级国民品牌”海澜之家新零售加速前行