【问题标题】:Creating a Material-UI tab with image tabs instead of text labels使用图像选项卡而不是文本标签创建 Material-UI 选项卡
【发布时间】:2020-08-26 03:43:46
【问题描述】:

我正在尝试将 Material-ui 选项卡组件用于垂直选项卡。我遇到的问题是如何使用预定义图标以外的图像而不是文本标签?

我尝试使用 Avatar 组件,打破 Tab 像这样:

    <Tab label="Item Two" {...a11yProps(1)}>
      <Avatar alt="test avatar" src="/logo192.png" />
    </Tab>

当我把头像放在 TabPanel 中时它可以工作,所以我知道它是正确的并正确指向图像,但是当我把它放在 Tab 中时,如上所示,我没有图像,只有“项目二”标签。是否可以使用 ButtonBase 创建带有图像的选项卡?我找不到任何使用 ButtonBase 的示例。还是我现在需要提交功能请求并在别处寻找?

【问题讨论】:

  • 你想达到什么目的?您不想在标签上方显示图像,例如图标?或者您希望图像成为选项卡的背景?
  • 我只想添加到下面的答案中;如果您需要更直接地控制图像,Giovanni 和 3limin4t0r 的解决方案都使用标准 HTML 图像而不是 Material-UI Avatar 组件。我最初的问题引用了 Avatar,因为它是 Material-UI 的一部分,但图像实际上对我来说效果更好,因为我可以将它放大以适应疲惫、老旧的眼睛。两者都是 Material-UI 选项卡组件中图像的绝佳解决方案。

标签: reactjs material-ui


【解决方案1】:

我不完全确定这是否是您所要求的,但您可以通过 Tab icon 属性传递您自己的图像以将它们用作图标。它们不一定是 Material-UI 图标。

<Tab icon={<Avatar alt="test avatar" src="/logo192.png" />} />

const {Tabs, Tab, Avatar} = MaterialUI;

function Demo() {
  const [selected, setSelected] = React.useState(0);

  return (
    <div style={{display: "flex"}}>
      <Tabs
        orientation="vertical"
        value={selected}
        onChange={(_, selected) => setSelected(selected)}
      >
        <Tab icon={<Avatar />} />
        <Tab label="second" />
      </Tabs>
      <div></div>
    </div>
  );
}

ReactDOM.render(<Demo />, document.querySelector("#root"));
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" />
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
<script src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@material-ui/core@4/umd/material-ui.production.min.js"></script>
<div id="root"></div>

【讨论】:

  • 这也很完美。谢谢你,3limin4t0r。另一个文档框外的解决方案,可以放在我的工具带中解决这个问题,也可能放在其他地方。
【解决方案2】:

Ciao,你有这个问题是因为Tab 不支持childrenMaterial UI docs 说:

不支持此道具(儿童)。如果需要,请使用组件道具 改变子结构。

所以你必须使用component props,例如这样:

<Tab
   label="Item One"
   {...a11yProps(0)}
   value={value}
   component={() => (
      <Button onClick={() => setValue(0)}> // this button to select the Tab (the first one in this case) when you click the Avatar 
         <Avatar src="<an image>" />   // Avatar here
      </Button>
   )}
/>

Here 一个代码框示例。

【讨论】:

  • 谢谢你,乔瓦尼。这不仅解决了我的问题并为我的标签提供了我想要的图像,它还展示了如何走出文档框并在其他组件中更具创意。使用 component= 可能并不适用于所有情况,但在我的工具带中使用它会有所帮助。
  • 没问题@Dale。很高兴为您的工具带添加了一些东西:)
猜你喜欢
  • 1970-01-01
  • 2021-02-03
  • 2018-03-26
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多