当前位置: 首页 > 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.dtcms.com/a/328026.html

相关文章:

  • Orange的运维学习日记--40.LNMP-LAMP架构最佳实践
  • 【前端:Html】--3.进阶:图形
  • [激光原理与应用-252]:理论 - 几何光学 - 传统透镜焦距固定,但近年出现的可变形透镜(如液态透镜、弹性膜透镜)可通过改变自身形状动态调整焦距。
  • 虚拟机环境部署Ceph集群的详细指南
  • 「让AI大脑直连Windows桌面」:深度解析Windows-MCP,开启操作系统下一代智能交互
  • Hi3DEval:以分层有效性推进三维(3D)生成评估
  • 【树状数组】Range Update Queries
  • 《Leetcode》-面试题-hot100-栈
  • Apache SeaTunnel 新定位!迈向多模态数据集成的统一工具
  • 亚马逊与UPS规则双调整:从视觉营销革新到物流成本重构的运营战略升级
  • linux下安装php
  • Linux内核编译ARM架构 linux-6.16
  • Node.js 和 npm 的关系详解
  • 能刷java题的网站
  • FPGA即插即用Verilog驱动系列——按键消抖
  • 【JavaEE】多线程之线程安全(中)
  • 第5章 AB实验的随机分流
  • 圆柱电池自动分选机:新能源时代的“质量卫士”
  • 各版本IDEA体验
  • Next.js 中间件:自定义请求处理
  • LeetCode 分割回文串
  • 终端互动媒体业务VS终端小艺业务
  • 本地部署开源媒体中心软件 Kodi 并实现外部访问( Windows 版本)
  • Perl——文件操作
  • 工业相机终极指南:驱动现代智能制造的核心“慧眼”
  • 云原生作业(tomcat)
  • 优选算法 力扣 18. 四数之和 双指针算法的进化 优化时间复杂度 C++ 题解 每日一题
  • Perl——$_
  • Bevy渲染引擎核心技术深度解析:架构、体积雾与Meshlet渲染
  • UE5.3 C++ 动态多播实战总结