[material-ui][AvatarGroup] 即使结果为空,头像仍然被计算,

wdebmtf2  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(38)

重复问题

  • 我搜索了现有的问题

最新版本

  • 我测试了最新版本

重现步骤 🕹

  • 使用 AvatarGroup 组件并在其中循环一个头像数组。
  • 不要直接在 AvatarGroup 中进行条件判断,而是渲染一个子组件并传递当前的头像数据。
  • 在子组件上创建一个条件来决定是否渲染头像,或者返回 null 以不渲染,这样就不会渲染头像。

这里是实时演示:SANDBOX-MATERIALUI-AVATAR-GROUP

当前行为 😯

在某些情况下,我需要在子组件中进行条件判断,以便在使用钩子获取一些数据后决定是否渲染头像。然而,将 null 返回以不渲染头像仍然被 avatargroup 视为 counted 导致它仍然渲染 + 图标。

预期行为 🤔

不要计算返回的空头像,以便不会渲染 + 图标。

上下文 🔦

这使得组件看起来有点问题,即使没有头像也会渲染 + 图标。我不确定这是不是我们的限制,我们不应该这样做,还是应该采用另一种方法。谢谢!

你的环境 🌎

npx @mui/envinfo

Don't forget to mention which browser you used.
  Output from `npx @mui/envinfo` goes here.
goqiplq2

goqiplq21#

这个问题是由于在 AvatarGroup 中,额外的头像计算是基于子对象的数量( children.length )。在应用 null 条件之前,您的自定义 AvatarChecker 组件被视为有效的子对象。我不确定我们是否应该正式支持 AvatarGroup 内的自定义组件。我认为这更多地是一种增强,而不是一个错误。我会保持这个问题开放,尽管我不确定它是否可行。

fxnxkyjh

fxnxkyjh2#

@paoloLigsay
正如@ZeeshanTamboli所提到的,他认为这是一个增强功能而不是一个错误。
与此同时,您可以使用以下代码来实现您的需求:
将以下代码放在组件上方
const notThese = ["W", "E", "H", "N"];

<AvatarGroup max={2}>
  {avatars
    .filter((f) => {
      if (notThese.includes(f.name)) {
        return false;
      }
      return true;
    })
    .map((avatar) => (
      <Avatar sx={{ bgcolor: "primary.main" }}>{avatar.name}</Avatar>
    ))}
</AvatarGroup>

让我们看看接下来会发生什么。

ht4b089n

ht4b089n3#

Hi @ZeeshanTamboli@PunitSoniME ,我同意将此视为增强功能,因为在没有自定义组件的情况下也能完美运行。感谢您的输入!

相关问题