【问题标题】:Antd apply Tooltip to Menu.Item on non collapsed SiderAntd 将 Tooltip 应用于非折叠 Sider 上的 Menu.Item
【发布时间】:2020-03-23 21:42:09
【问题描述】:

我正在尝试复制折叠的 Sider 而没有声明 collapsed={true} 纯粹是为了获得工具提示效果。

问题是当我将Menu.Item 包装在Tooltip 中时,它似乎不再被定义并且特殊触发器也没有出现

import React from "react";
import ReactDOM from "react-dom";
import "antd/dist/antd.css";
import "./index.css";
import { Layout, Menu, Icon, Tooltip } from "antd";
import { sidebar } from "./nav";

const { Header, Sider, Content } = Layout;

class SiderDemo extends React.Component {
  state = {
    collapsed: false
  };

  toggle = () => {
    this.setState({
      collapsed: !this.state.collapsed
    });
  };

  render() {
    return (
      <Layout>
        <Sider trigger={null} collapsible collapsedWidth="0" breakpoint="sm">
          <div className="logo" />
          <Menu theme="dark" mode="inline" defaultSelectedKeys={["1"]}>
            {sidebar.map(menu => (
              <Tooltip placement="right" title={menu.name}>
                <Menu.Item
                  style={{ borderRadius: 2, width: "72px" }}
                  item={menu.name}
                  key={menu.key}
                >
                  <Icon type={menu.icon} />
                </Menu.Item>
              </Tooltip>
            ))}
          </Menu>
        </Sider>
        <Layout>
          <Header style={{ background: "#fff", padding: 0 }}>
            <Icon
              className="trigger"
              type={this.state.collapsed ? "menu-unfold" : "menu-fold"}
              onClick={this.toggle}
            />
          </Header>
          <Content
            style={{
              margin: "24px 16px",
              padding: 24,
              background: "#fff",
              minHeight: 280
            }}
          >
            Content
          </Content>
        </Layout>
      </Layout>
    );
  }
}

ReactDOM.render(<SiderDemo />, document.getElementById("container"));

【问题讨论】:

    标签: css reactjs antd


    【解决方案1】:

    将您的tooltip 移动到内部并包裹Menu.ItemIcon。我发现这是最快的方法。

       {sidebar.map(menu => (
                  <Menu.Item
                    style={{ borderRadius: 2, width: "72px" }}
                    item={menu.name}
                    key={menu.key}
                  >
                    <Tooltip
                      placement="right"
                      title={menu.name}
                      className="tooltip"
                    >
                      <div className="my-icon-wrapper test">
                        <Icon type={menu.icon} />
                      </div>
                    </Tooltip>
                  </Menu.Item>
                ))}
    

    css

    .my-icon-wrapper {
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      display: flex;
      flex-direction: row;
      justify-content: center;
      align-items: center;
    }
    .test {
      border: 1px solid red;
    }
    

    【讨论】:

    • 我知道这行得通,但是,我问的原因是我希望在将鼠标悬停在 Menu.Item 上时出现工具提示,而不是图标。
    • @Freddy。我更新了代码。那是你要找的吗?
    • 嘿,你是怎么录制 gif 的?您使用的是哪个操作系统?
    • 我使用“ScreenToGif”。我在 Windows 10 上。
    • @blueseal 似乎在您将鼠标悬停在不同的屏幕尺寸上时工具提示停止工作
    【解决方案2】:

    目前,您的代码无法正常工作,因为Menu 要求其子级只能Menu.Item 类型。

    因此,您需要添加与 width 相同的包装器 Menu.Item

    //    v remove the trigger={null} for trigger to appear
    <Sider collapsible collapsedWidth="0" breakpoint="sm">
    
    
    <Menu theme="dark" mode="inline" defaultSelectedKeys={['1']}>
      {sidebar.map(menu => (
        <Menu.Item item={menu.name} key={menu.key}>
          <Tooltip placement="right" title={menu.name}>
    //                       v Wrapper
            <div style={{ width: '100%' }}>
              <Icon type={menu.icon} />
            </div>
          </Tooltip>
        </Menu.Item>
      ))}
    </Menu>
    

    【讨论】:

    • 啊,我明白了。丹尼斯你能不能回答一下为什么特殊的触发图标没有出现在侧边栏上?
    • 我不明白你指的是哪个特殊触发器
    • codesandbox.io/s/31j2kjyo0q 当 collapsedWidth=0 在断点上时,触发器应该出现
    • 因为你设置了trigger={null},所以检查更新的沙箱
    • 啊,我没看到。当您将鼠标悬停在不同的屏幕尺寸上时,工具提示似乎停止工作。
    猜你喜欢
    • 2020-05-15
    • 2019-12-02
    • 1970-01-01
    • 2020-05-16
    • 2023-01-19
    • 2021-02-02
    • 2019-05-05
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多