Creating a Material-UI tab with image tabs instead of text labels

邮差的信 提交于 2021-01-07 02:58:48

问题


I'm trying to use the Material-ui tab component for a vertical tab. The problem I am having is how to use an image other than the pre-defined icons rather than a text label?

I tried using an Avatar component, breaking Tab like this:

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

The Avatar works when I put it in the TabPanel so I know it is right and points to the image correctly, but when I put it in the Tab, as shown above, I get no image, just the "Item Two" label. Is it possible to create a tab with an image using the ButtonBase? I couldn't find any sample of using the ButtonBase. Or do I need to submit a feature request and look elsewhere for now?


回答1:


Ciao, you have this problem because Tab does not support children. Material UI docs says:

This prop (children) isn't supported. Use the component prop if you need to change the children structure.

So you have to use component props, for example in this way:

<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 a codesandbox example.




回答2:


I'm not entirely sure if this is what you are asking, but you can pass your own images through the Tab icon property to use them as an icon. They don't have to be Material-UI icons.

<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>


来源:https://stackoverflow.com/questions/63590164/creating-a-material-ui-tab-with-image-tabs-instead-of-text-labels

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!