Ant Design | 获取 Grid 的列数

为什么要获取 Grid 的列数?

因为设计如下:

在这里插入图片描述

在这里插入图片描述

每个 item 的宽度是固定的,列数随 Grid 宽度自动调整,并且最后一排的 item 是不显示底部横线的。

item 底部显示横线:
在这里插入图片描述

item 底部不显示横线:
在这里插入图片描述

很显然,需要对 item 进行封装,并且有一个属性:

/** 是否显示底部分割线,默认显示 */
showBottomBorder?: boolean;

UI 很简单,现在的问题有两个:

  1. 确定列数;
  2. 确定最后一排有几个 item。

因为每个 item 的宽度是固定的,然后 Grid 的整体宽度可以通过 ahooksuseSize 获取,最后通过计算就可以知道最后一排 item 的数量,伪代码如下:

const { length } = dataSource;// 每排有几个item
const countPerRow = Math.floor(rowSize?.width / itemWidth);// 最后一排item的数量
const lastRowCount = length % countPerRow || countPerRow;const listContainer = (<Row gutter={30} ref={rowRef}>{dataSource.map(({ ...properties }, index) => (<Col key={index}><Item// 最后一排不显示分割线showBottomBorder={length - index > lastRowCount}{...properties}/></Col>))}</Row>
);

但是后面调试的时候发现,在临界条件下,最后一排的几个 item 也显示了底部横线,也就是说计算不精准。

之所以会出现这种情况,是因为 item 的宽度并不是 GridCol 的宽度,Col 会包裹 item,并添加 padding。要计算准确的列数,需要用 GridRow 的宽度除以 Col 的宽度,因此还需要用 ahooksuseSize 获取 Col 的宽度。

const rowRef = useRef(null);
const rowSize = useSize(rowRef);
const colRef = useRef(null);
const colSize = useSize(colRef);const { length } = dataSource;
// 每排有几个item
const countPerRow = Math.floor((rowSize?.width ?? 1) / (colSize?.width ?? 1));
// 最后一排item的数量
const lastRowCount = length % countPerRow || countPerRow;const listContainer = (<Row gutter={30} ref={rowRef}>{dataSource.map(({ ...properties }, index) => (<Col key={index} ref={colRef}><div className={styles.itemWrap}><Item// 最后一排不显示分割线showBottomBorder={length - index > lastRowCount}{...properties}/></div></Col>))}</Row>
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/456178.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习之DeepSequence软件使用学习1

简介 DeepSequence 是一个生成性的、无监督的生物序列潜变量模型。给定一个多重序列比对作为输入&#xff0c;它可以用来预测可获得的突变&#xff0c;提取监督式学习的定量特征&#xff0c;并生成满足明显约束的新序列文库。它将序列中的高阶依赖性建模为残差子集之间约束的非…

LLMs之Llama2 70B:《Self-Rewarding Language Models自我奖励语言模型》翻译与解读

LLMs之Llama2 70B&#xff1a;《Self-Rewarding Language Models自我奖励语言模型》翻译与解读 目录 《Self-Rewarding Language Models》翻译与解读 Abstract 5 Conclusion结论 6 Limitations限制 《Self-Rewarding Language Models》翻译与解读 地址 文章地址&#xff1…

华为数通方向HCIP-DataCom H12-821题库(单选题:441-460)

第441题 下面是一台路由输出的信息,关于这段信息描述正确的是 <R1>display bgp peerBGP local router ID : 2.2.2.2Local AS number : 100Total number of peers : 2 Peers in established state : 0Peer V AS MsgRcvd MsgSent OutQ Up/Down …

最小覆盖子串[困难]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串&#xff0c;则返回空字符串"" 。 对于t中重复字符&#xff0c;我们寻找的子字符串中该字符数量必须不少于t中该字符数量…

BUUCTF-Real-[PHPMYADMIN]CVE-2018-12613

目录 漏洞背景介绍 漏洞产生 漏洞利用 漏洞验证 漏洞背景介绍 phpMyAdmin 是一个以PHP为基础&#xff0c;以Web-Base方式架构在网站主机上的MySQL的数据库管理工具&#xff0c;让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳…

02.05

1.单链表 main #include "1list_head.h" int main(int argc, const char *argv[]) { //创建链表之前链表为空Linklist headNULL;int n;datatype element;printf("please enter n:");scanf("%d",&n);for(int i0;i<n;i){printf("ple…

Snake: MoonBit版贪吃蛇来了!

什么是贪吃蛇&#xff1f; 贪吃蛇&#xff08;Snake&#xff09;是起源于1976年的街机游戏 Blockade。此类游戏在1990年代由于一些具有小型屏幕的移动电话的引入而再度流行起来&#xff0c;在现在的手机上基本都可安装此小游戏。版本亦有所不同。 在游戏中&#xff0c;玩家操…

时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于CNN-LST…

JVM 性能调优 - 常用的垃圾回收器(6)

垃圾收集器 在 JVM(Java虚拟机)中,垃圾收集器(Garbage Collector)是负责自动管理内存的组件。它的主要任务是在程序运行过程中,自动回收不再使用的对象所占用的内存空间,以便为新的对象提供足够的内存。 JVM中的垃圾收集器使用不同的算法和策略来实现垃圾收集过程,以…

vue2 自定义指令 v-highlight 文本高亮显示分享

简单分享一个文本高亮显示的自定义指令&#xff0c;主要分两部分&#xff1a; 1、代码实现&#xff1a;在 main.js 文件中添加一个自定义指令&#xff0c;实现搜索时文本高亮显示&#xff0c;代码如下&#xff1a; const highlightText (el, searchText) > {const textCo…

42、馒头详谈脑电设备

脑电设备作为脑机接口技术的中层&#xff0c;有着承上启下的作用&#xff0c;设备采集的脑电信号质量如何&#xff0c;直接关乎着后续的模型的训练&#xff0c;虽然我们拿到原始EEG信号后会做一些预处理&#xff0c;比如工频滤波&#xff0c;通道加权平均&#xff0c;ICA去伪迹…

进阶C语言-通讯录的实现

通讯录 🎈1.设计要求🎈2.程序实现🔭2.1打印菜单及初始化通讯录🔭2.2显示所有联系人🔭2.3查找指定的联系人🔭2.4删除指定的联系人🔭2.5查找指定的联系人🔭2.6修改指定联系人🔭2.7按照年龄排序(以此为例)🎈3.全部源码以及实现🎈1.设计要求 🌞通过前面…