电商网站的需求文档wordpress主题的安装教程
电商网站的需求文档,wordpress主题的安装教程,宁波免费做网站,网站建设主要营销内客#x1f4c5; 我们继续 50 个小项目挑战#xff01;—— RandomChoicePicker组件 仓库地址#xff1a;https://gitee.com/hhm-hhm/50days50projects.git 构建一个简单的标签输入组件。用户可以在文本框中输入多个选项#xff0c;并通过逗号分隔#xff0c;组件会自动将其… 我们继续 50 个小项目挑战——RandomChoicePicker组件仓库地址https://gitee.com/hhm-hhm/50days50projects.git构建一个简单的标签输入组件。用户可以在文本框中输入多个选项并通过逗号分隔组件会自动将其拆分成可视化的“标签”展示出来。 组件目标接收用户输入的一段文本。使用逗号,分割输入内容。动态渲染为一组“标签”Tag。使用 TailwindCSS 快速构建美观现代的 UI 界面。提供清晰的交互反馈。RandomChoicePicker.tsx 组件实现import React, { useState, useEffect } from react const RandomChoicePicker: React.FC () { const [textareaText, setTextareaText] useStatestring() const [tagList, setTagList] useStatestring[]([]) // 每当 textareaText 变化时自动分割标签 useEffect(() { const tags textareaText .split(,) .map((item) item.trim()) // 去除前后空格 .filter((item) item ! ) // 过滤空字符串 setTagList(tags) }, [textareaText]) return ( div classNameflex h-screen items-center justify-center div classNamew-full max-w-2xl rounded-2xl bg-gray-400 p-8 shadow-lg h3 classNamefont-mono text-2xl text-gray-800 Enter all of the choices divided by a comma (,).(输入所有选项并用英文逗号,分隔) br / Press enter when youre done /h3 textarea classNamemy-4 h-36 w-full resize-none rounded-lg bg-gray-200 p-4 text-gray-800 placeholder-gray-500 focus:ring-2 focus:ring-blue-300 focus:outline-none placeholderEnter choices here... value{textareaText} onChange{(e) setTextareaText(e.target.value)} / {tagList.length 0 ( div classNamemt-4 flex flex-wrap gap-2 {tagList.map((item, index) ( div key{${item}-${index}} // 使用 index 避免重复 key因 item 可能重复 classNamerounded-2xl bg-amber-200 px-3 py-1 text-sm font-medium text-gray-800 {item} /div ))} /div )} /div div classNameabsolute right-20 bottom-10 text-red-500CSDNHao_Harrision/div /div ) } export default RandomChoicePicker✅ 关键实现说明功能Vue 实现React TS 实现双向绑定文本域v-modeltextareaTextvalue onChange控制自动分割逗号内容watchEffectsplitTag()useEffect监听textareaText标签渲染v-foritem in tagList{tagList.map(...)}空值过滤无原逻辑会保留空字符串✅ 添加.trim()和filter(item ! )提升体验️ 改进细节去重与清理使用.trim()去除每个选项前后的空格如 apple →apple。过滤掉空字符串避免显示空白标签。Key 策略因用户可能输入重复项如A, A, B不能仅用item作 key。改为key{item−{index}}确保唯一性避免 React 警告。UI/UX 增强添加resize-none禁止手动调整 textarea 大小保持布局稳定。添加focus:ring提升交互反馈。使用flex-wrap确保标签在小屏换行。添加bg-gray-100背景色提升整体可读性。类型安全textareaText: stringtagList: string[] 注意事项此组件目前只负责输入和解析不包含“随机选择”逻辑如抽一个标签。如果你后续需要“Pick Random”功能可以在此基础上加一个按钮调用const pickRandom () { if (tagList.length 0) { const random tagList[Math.floor(Math.random() * tagList.length)]; alert(Selected: ${random}); } }; TailwindCSS 样式重点讲解 TailwindCSS 样式说明类名作用flex,items-center,justify-center居中布局整个容器h-screen容器高度为视口全高rounded-2xl圆角大小为 1rembg-gray-400、bg-gray-200、bg-amber-200设置背景颜色p-8,p-4,p-1不同层级的内边距my-4上下外边距为 1remw-full宽度为 100%h-36高度为 9remtext-2xl字体大小为 1.5remfont-mono使用等宽字体gap-2flex 子元素之间间隔为 0.5remh-8高度为 2remrounded-2xl圆角为 1rem这些类名帮助我们快速构建出一个居中的响应式布局并确保视觉上的一致性和美观性。 路由组件 常量定义router/index.tsx中children数组中添加子路由{ path: /, element: App /, children: [ ... { path: /RandomChoicePicker, lazy: () import(/projects/RandomChoicePicker.tsx).then((mod) ({ Component: mod.default, })), }, ], },constants/index.tsx 添加组件预览常量import demo13Imgfrom /assets/pic-demo/demo-13.png 省略部分.... export const projectList: ProjectItem[] [ 省略部分.... { id: 13, title: Random Choice Picker, image: demo13Img, link: RandomChoicePicker, }, ] 小结作为表单组件的一部分用于收集用户输入的多项数据。 明日预告 我们将完成AnimatedNavigation组件一个非常有意思的动画的导航组件原文链接https://blog.csdn.net/qq_44808710/article/details/148615314每天造一个轮子码力暴涨不是梦