拓冰建站拓冰建站
首页 / 资讯中心 / 正文

rsuite Card 组件实战:用 Card 构建「创建项目」表单的完整方案

前端UI组件【免费下载链接】rsuite A suite of React components .项目地址https://gitcode.com/gh_mirrors/rs/rsuite点击查看免费下载本文以 rsuite 组件库中的 Card 组件为核心讲解如何将 Card 与其 Header / Body / Footer 子组件组合成一个结构清晰的「创建项目」表单容器并通过form属性实现表单与外部提交按钮的跨区域联动。读完本文你将掌握 Card 组件在表单场景中的标准写法、各子组件的职责划分、width/size/shaded等布局属性的实际效果以及 Form SelectPicker 等组件在 Card 内的组合用法。场景概述为什么用 Card 承载表单Card 是 rsuite 中用于结构化展示数据的容器组件可以包含图片、文本、按钮等多种子组件见 docs/pages/components/card/en-US/index.md。在表单场景中Card 天然具备分组 层次的优势视觉分区Header 放标题与说明、Body 放表单控件、Footer 放操作按钮三块职责清晰尺寸约束通过width直接限定卡片宽度避免表单控件无限拉伸操作聚合Footer 中的提交/取消按钮与 Body 中的表单在视觉上同属一个卡片交互连贯。在 rsuite 的文档示例中「Within Form」一节正是以创建项目Create project表单为例演示了这种组合模式见 within-form.md。完整代码示例与运行方式以下为「创建项目」表单的完整实现来自 docs/pages/components/card/fragments/within-form.mdimport { Card, Heading, Text, Form, Button, SelectPicker } from rsuite; const App () { return ( Card width{400} shaded sizelg Card.Header Heading level{4}Create project/Heading Text mutedFill in the form below to create a new project/Text /Card.Header Card.Body Form fluid idproject-form onSubmit{formValue console.log(formValue)} Form.Group Form.ControlLabelName/Form.ControlLabel Form.Control namename placeholderName of project / /Form.Group Form.Group Form.ControlLabelPlatform/Form.ControlLabel Form.Control block nameplatform searchable{false} accepter{SelectPicker} placeholderSelect platform data{[ { label: Web, value: web }, { label: Mobile, value: mobile }, { label: Desktop, value: desktop } ]} / /Form.Group /Form /Card.Body Card.Footer Button appearanceprimary typesubmit formproject-form Create /Button Button appearancesubtleCancel/Button /Card.Footer /Card ); }; ReactDOM.render(App /, document.getElementById(root));该示例可直接在 rsuite 文档站点的 Card 组件页Within Form 小节中运行预览。在本地项目中你只需通过import { Card, Form, Button, SelectPicker } from rsuite引入对应组件即可复刻同样的效果。剖析 Card 的三段式结构Header / Body / Footer在 rsuite 中Card是一个复合组件通过静态属性挂载了三个子组件见 src/Card/Card.tsxconst Subcomponents { Header: CardHeader, Body: CardBody, Footer: CardFooter };因此你既可以写Card.Header也可以从rsuite中单独导入CardHeader、CardBody、CardFooter使用导出关系见 src/Card/index.tsx。三个子组件均由createComponent创建为div元素见 src/Card/CardHeader.tsx、src/Card/CardBody.tsx、src/Card/CardFooter.tsx职责划分如下子组件语义职责示例中的内容Card.Header卡片头部通常放标题与简介Heading level{4}标题Text muted灰色说明文字Card.Body卡片主体承载主要数据或表单控件Form表单控件组Card.Footer卡片底部放操作入口ButtonCreate / Cancel从样式实现看三块区域有着不同的内边距规则见 src/Card/styles/index.scss-headerpadding: var(--rs-card-padding) var(--rs-card-padding) 0 var(--rs-card-padding)上左右有内边距底部为 0-body四边均为var(--rs-card-padding)-footerdisplay: flex; gap: 8px;按钮之间自动保持 8px 间距底部内边距留白。这种Header 紧贴 Body、Footer 独立成行的间距设计正是示例中标题、表单、按钮三层视觉层次感的来源。关键布局属性width、size 与 shaded示例卡片对外部形态设置了三个属性均声明在 src/Card/Card.tsx 的CardProps中属性类型默认值作用widthnumber \| string—卡片宽度示例中设为400pxsizesm \| md \| lg—卡片尺寸示例中设为lgshadedboolean \| hover—是否显示阴影示例中为trueborderedbooleantrue是否显示边框实现细节width 通过 CSS 变量注入Card内部将width值写入--rs-card-width变量cssVar(width, width, getCssValue)样式表中的.rs-card默认width: var(--rs-card-width)默认回退为100%。这意味着不传width时卡片占满父容器传入数字如 400时则按像素固定宽度。size 控制内边距样式表对data-size属性做了分级处理——sm为calc(var(--rs-spacing) * 2)md为calc(var(--rs-spacing) * 4)lg为calc(var(--rs-spacing) * 6)。示例选用sizelg可获得最大的内边距适合承载表单这种信息密度较高的内容。shaded 控制阴影data-shadedtrue时启用box-shadow: var(--rs-card-shadow)若设为hover则仅在鼠标悬停时显示阴影并带有cursor: pointer。示例用shaded布尔值让卡片常驻阴影在页面中更醒目。表单与按钮的跨区域联动form 属性的巧妙用法本示例最值得学习的技巧在于提交按钮并不在Form内部而是位于Card.Footer中两者通过 HTML 原生form属性完成关联Form fluid idproject-form onSubmit{formValue console.log(formValue)} ... /Form Card.Footer Button appearanceprimary typesubmit formproject-form Create /Button /Card.Footer给Form设置idproject-form给 Footer 中的提交按钮设置typesubmit与formproject-form。浏览器会将form属性指向的form元素视为该按钮的宿主表单因此点击 Footer 中的Create按钮即可触发表单提交并触发Form的onSubmit回调(formValue, event) void见 src/Form/Form.tsx。示例中onSubmit将收集到的表单值直接console.log输出实际项目中可替换为接口调用或状态更新。这种写法打破了表单控件必须与按钮同处一个父级的直觉让布局可以自由跨区域组织是 Card 承载复杂交互时的重要模式。表单细节fluid、accepter 与 SelectPicker示例中的表单控件有两个值得注意的配置Form 的fluid属性Form fluid idproject-form onSubmit{formValue console.log(formValue)}fluid让表单内的输入控件占满表单容器宽度仅在垂直布局下有效见 src/Form/Form.tsx 中fluid?: boolean的注释。在width{400}的固定宽度卡片中配合fluid可保证输入框完整撑开卡片主体避免左右出现参差空隙。accepter 替换控件与 searchableForm.Control block nameplatform searchable{false} accepter{SelectPicker} placeholderSelect platform data{[ { label: Web, value: web }, { label: Mobile, value: mobile }, { label: Desktop, value: desktop } ]} /Form.Control默认渲染为文本框通过accepter{SelectPicker}可以将它替换为选择器组件data提供选项数组label为展示文本、value为提交值block让选择器占满宽度searchable{false}关闭搜索功能。提交后platform字段的值会是web、mobile或desktop三者之一。Name 输入框Form.Control namename placeholderName of project /未指定accepter时渲染为普通文本框用户输入的项目名通过namename映射到表单值对象中。相关扩展卡片尺寸与阴影的更多用法如果你希望在表单卡片之外进一步掌握 Card 的视觉控制仓库文档还提供了多个关联示例见 docs/pages/components/card/en-US/index.md 的 Examples 小节Shadow / Hover Shadow分别对应shaded的常驻阴影与shadedhover悬停阴影用法shadow.md、hover-shadow.mdSizessize取sm/md/lg三种尺寸的直观对比size.mdHorizontal通过directionrow实现横向布局horizontal.mdCard Group如需同时展示多个卡片可使用CardGroup组件它支持columns列数与spacing间距默认 16两个属性。小结本文围绕 rsuite 的 Within Form 示例完整拆解了用 Card 构建「创建项目」表单的实现方案利用Card.Header/Card.Body/Card.Footer三段式结构组织标题、表单与操作按钮通过width、size、shaded控制卡片外观借助 HTML 原生form属性让 Footer 中的按钮跨区域触发表单提交再配合Form的fluid、accepter{SelectPicker}等配置完成控件定制。这套组合既保持了 Card 的视觉统一性又兼顾了表单交互的完整性是 rsuite 中容器卡片 表单场景的推荐实践。赞分享前端UI组件【免费下载链接】rsuite A suite of React components .项目地址https://gitcode.com/gh_mirrors/rs/rsuite点击查看免费下载相关推荐Optuna 如何在单机多进程上并行调参并共享 JournalStorageOptuna 如何在单机多进程上并行调参并共享 JournalStorage 在单机上跑 Optuna 调参时如果只想利用多个 CPU 核心而不想额外部署 M前端UI组件MNN 如何开启 CoreML 后端在 iOS 上使用 NPU 加速MNN 如何开启 CoreML 后端在 iOS 上使用 NPU 加速 在 iOS 应用里使用 MNN 做推理时如果你希望借助苹果设备的 NPUANE硬件前端UI组件coss Card 组件实战指南用 Card/CardHeader/CardPanel/CardFooter 构建结构化内容区块coss Card 组件实战指南用 Card/CardHeader/CardPanel/CardFooter 构建结构化内容区块 导读 coss Card 是企业应用后端前端上一篇Terracognita 快速入门指南10分钟掌握云资源反向转换技巧下一篇QGroundControl故障排查与优化10个常见问题解决方案大全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门