ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

rsuite CheckPicker renderExtraFooter 实战:自定义底部全选工具栏

rsuite CheckPicker renderExtraFooter 实战:自定义底部全选工具栏 前端UI组件【免费下载链接】rsuite A suite of React components .项目地址https://gitcode.com/gh_mirrors/rs/rsuite点击查看免费下载renderExtraFooter是 rsuiteCheckPicker提供的弹层底部自定义插槽用于在选项列表下方渲染任意内容最常见的场景是在多选下拉中内置「全选 / 取消全选」与「确定关闭」操作。本文以 extra-footer.md 中的完整示例为骨架结合 CheckPicker.tsx 与 PickerPopup.tsx 的源码实现讲解如何用受控值 Checkbox半选状态 Button构建一个可复用的全选底部工具栏并给出可复制运行的完整代码。一、renderExtraFooter 是什么从 CheckPicker 属性表 可以看到renderExtraFooter的类型签名为renderExtraFooter?: () ReactNode它接收一个返回ReactNode的函数渲染位置在弹层Popup的列表listbox之后。查看 CheckPicker.tsx 中renderPopup的实现弹层结构依次为搜索框searchable开启时渲染SearchBox选项列表可被renderListbox替换renderExtraFooter?.()—— 底部自定义区域。也就是说底部工具栏始终固定在弹层最下方、选项列表之外不随列表滚动天然适合放置全选、确定、清空等操作按钮。二、完整示例全选 确定 的底部工具栏以下代码即 extra-footer.md 中的核心示例可直接复制运行import { CheckPicker, Checkbox, Button, HStack } from rsuite; const data [Eugenia, Bryan, Linda, Nancy, Lloyd, Alice, Julia, Albert].map( item ({ label: item, value: item }) ); const allValue data.map(item item.value); const App () { const picker React.useRef(); const [value, setValue] React.useState([]); const handleChange value { setValue(value); }; const handleCheckAll (value, checked) { setValue(checked ? allValue : []); }; return ( div classNameexample-item CheckPicker data{data} placeholderSelect ref{picker} w{224} value{value} onChange{handleChange} renderExtraFooter{() ( HStack justifyContentspace-between px{12} py{4} bdt1px solid var(--rs-border-primary) Checkbox indeterminate{value.length 0 value.length allValue.length} checked{value.length allValue.length} onChange{handleCheckAll} Check all /Checkbox Button appearanceprimary sizesm onClick{() { picker.current.close(); }} Ok /Button /HStack )} / /div ); }; ReactDOM.render(App /, document.getElementById(root));示例基于 8 条人员数据Eugenia、Bryan、Linda、Nancy、Lloyd、Alice、Julia、Albertdata被映射为{ label, value }结构——这正是 CheckPicker 默认读取的labelKey与valueKey默认值均为label/value见 CheckPicker.tsx。三、核心实现要点拆解3.1 受控 value 驱动全选逻辑示例使用useState管理value并通过value/onChange将 CheckPicker 变为受控组件handleChange把选择结果写回 statehandleCheckAll(value, checked)根据checked布尔值一键写入allValue全选或[]清空。allValue由data.map(item item.value)预先计算与数据源保持一致。从源码看CheckPicker 内部通过useControlled(valueProp, defaultValue || [])CheckPicker.tsx同步受控值用户每勾选一项都会触发handleItemSelect→setValue→handleChangeValue→onChangeCheckPicker.tsx因此 footer 中的value永远是最新的选择状态。3.2 用 indeterminate 表达「部分选中」Checkbox的选中状态分三档checked{value.length allValue.length}全部选中时勾选indeterminate{value.length 0 value.length allValue.length}选中一部分时显示半选横线两者都为false未选中任何项。查看 Checkbox.tsxindeterminate会通过useIndeterminateCheckbox钩子反射到原生 input 的indeterminate属性同时aria-checked被置为mixedCheckbox.tsx保证无障碍语义正确。3.3 通过 ref 调用 close 关闭弹层ref{picker}拿到的是 CheckPicker 的实例句柄PickerHandle点击「Ok」按钮时调用picker.current.close()直接关闭弹层。这一能力来自 Picker 内部统一的 PickerHandle 接口由usePickerRef组装而成CheckPicker.tsx。3.4 HStack 快速布局底部工具栏使用HStack做横向布局justifyContentspace-between左「全选」、右「Ok」两端对齐px{12} py{4}内边距bdt1px solid var(--rs-border-primary)顶部 1px 边框与弹层视觉分隔颜色取 rsuite 主题变量--rs-border-primary可随主题自动切换。HStack是 rsuite 基于 Flexbox 的快速布局组件Stack.tsxpx/py/bdt这类简写样式属性来自其继承的Box能力无需手写内联样式或额外 CSS 类。四、与文档其它入口的组合使用renderExtraFooter与 CheckPicker 的其他能力天然兼容常见组合包括场景组合方式大数据量全选开启virtualized虚拟列表见 virtualized.mdfooter 中的全选不受列表渲染性能影响分类选择设置groupBy分组后见 group.md可在 footer 追加「清空已选」按钮异步加载结合 async.mdfooter 可放置「刷新数据」操作受控场景参见 controlled.mdfooter 内按钮同样能调用setValue干预受控值五、无障碍与键盘交互给底部工具栏加功能时不要破坏 CheckPicker 已有的无障碍约定详见 en-US/index.md弹层本体是combobox选项列表为listbox带aria-multiselectabletrueCheckbox的indeterminate状态会自动输出aria-checkedmixed键盘支持↓/↑移动焦点、Enter选中、Esc关闭列表footer 内的Button保持原生可聚焦不影响现有键盘操作链路。六、小结renderExtraFooter让 CheckPicker 的多选体验从「选完手动点外部按钮」升级为「弹层内一站式完成全选与确认」。实现时只需记住三个关键点保持受控valueonChange让 footer 内组件与选项列表共享同一份选择状态三档勾选用checked/indeterminate表达全选、半选、未选三种状态ref 收尾通过picker.current.close()让「Ok」按钮完成确认并关闭弹层。该模式同样适用于SelectPicker、TreePicker、CheckTreePicker等同样支持renderExtraFooter的 Picker 组件族一处掌握、处处复用。赞分享前端UI组件【免费下载链接】rsuite A suite of React components .项目地址https://gitcode.com/gh_mirrors/rs/rsuite点击查看免费下载相关推荐rsuite CheckTreePicker 自定义页脚renderExtraFooter实战指南实现全选与批量操作rsuite CheckTreePicker 自定义页脚renderExtraFooter实战指南实现全选与批量操作 导读 在 rsuite 的树形多选选前端UI组件v-viewer底部工具栏按钮自定义指南v viewer底部工具栏按钮自定义指南 v viewer作为一款基于Viewer.js的Vue图片查看器组件提供了丰富的图片查看和操作功能。其中底部工具栏的前端UI组件rsuite CheckPicker 虚拟列表virtualized实战万级选项下的多选下拉性能优化指南rsuite CheckPicker 虚拟列表virtualized实战万级选项下的多选下拉性能优化指南 CheckPicker 是 rsuite 提供的前端UI组件上一篇Open Design开源AI设计革命如何用259技能打造专业级设计原型下一篇TeslaMate 中文完整指南3步切换语言翻译贡献全流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表