reactjs - 我如何在反应中制作这样的组件?
问题描述
我需要的是如图所示的东西。我需要显示某些名称,如果名称列表超过 2 行,我需要显示 +n others
。如果用户单击+n others
列表,则需要展开以显示所有其他列表。
是否有任何组件可用于响应以获得此结果?我在很多网站上看到过,但不知道它们叫什么。
我可以自己编写组件,但困难的部分是在显示 +n 个其他名称之前要显示多少个名称。我最初只能显示 2 行,每个名称可以是可变长度。因此,在一种情况下,一个名字可能占据整个第一行,而在其他情况下,我可能能够容纳 3 个名字。
解决方案
您必须存储列表的状态,看看它是否扩展。
这样的事情应该会有所帮助。
import React, { useEffect, useState } from "react";
const myList = ({ list }) => {
const MAX_COUNT = 5;
const [isExpended, setIsExpended] = useState(false);
useEffect(() => {
if (list.length <= MAX_COUNT) {
setIsExpended(true);
}
}, [list]);
const expend = () => {
setIsExpended(true);
};
return (
<>
<div>
{list.map((item, i) =>
(isExpended === false && i < MAX_COUNT) || isExpended === true
? item.text
: null
)}
</div>
{isExpended === false ? (
<button onClick={expend}>+ {list.length - MAX_COUNT} others</button>
) : null}
</>
);
};
export default myList;
如果您想在任何条件下坚持使用 2 行,将有 2 种方法来设置动态MAX_COUNT
:
1:如果您对 box-sizing 和 fonts 等有一个常量值:您可以计算每个元素的 outerWidth(带有 box-sizing 和元素长度)并MAX_COUNT
基于此设置一个实数。
2:如果您有响应式设计:您可以使用初始MAX_COUNT
但隐藏内容来渲染组件,visibility: hidden
然后计算每个元素的outerWidth会更真实,更容易。在这种情况下,您必须修复容器高度以防止它过度延伸,只需为其设置一个恒定高度,您也可以在获得真实的MAX_COUNT
. 现在您可以无后顾之忧地显示内容。
推荐阅读
- robotframework - 机器人框架-robotframework-sshlibrary-NameError:未定义名称'platform_system'
- html - 单击单选按钮时,根据用户选择打开引导模式
- cryptography - 将 OpenPGP 功能与 PKCS#11 集成以在 .NET/C# 应用程序中使用 HSM 设备
- java - Kotlin Int 的 8 个十六进制数字超出范围,但适用于 java int
- javascript - React:改变 useState 中对象集的值
- css - 将样式应用于 Tab 组件中的 ButtonBase
- java - Apache Camel Bean 中的动态 PropertyInjection
- ios - 在 ios 中禁用此应用的 Google 登录
- anaconda - Jupyter - 无法启动内核
- java - ModelMapper:来自空对象的不正确属性映射