【问题标题】:Material UI - tooltip displays unexpectedly材质 UI - 工具提示意外显示
【发布时间】:2018-06-08 08:19:09
【问题描述】:

我在我的项目中使用 Material-ui 和 react。我要做的是在满足某些条件时简单地更改工具提示(每个工具提示都包含一个图标)。

ToolTipWrapper.js

import React from "react";
import { Tooltip } from "@material-ui/core";
import { CheckCircle, Error } from "@material-ui/icons";
import { green, deepOrange } from "@material-ui/core/colors";

class TooltipWrapper extends React.Component {
  render() {
    return this.props.error.length === 0 ? (
      <Tooltip title="meet all requirements" placement="bottom-start">
        <CheckCircle style={{ color: green[400] }} />
      </Tooltip>
    ) : (
      <Tooltip title="Not meet all requirements" placement="bottom-start">
        <Error style={{ color: deepOrange[400] }} />
      </Tooltip>
    );
  }
}

export default TooltipWrapper;

index.js

import React from "react";
import { render } from "react-dom";
import TooltipWrapper from "./TooltipWrapper.js";

const styles = {
  fontFamily: "sans-serif",
  textAlign: "center"
};

class App extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      error: []
    };
  }
  handleClick = () => {
    this.setState({
      error: [123]
    });
  };

  render() {
    return (
      <div style={styles}>
        <TooltipWrapper error={this.state.error} />
        <button onClick={this.handleClick}>change</button>
      </div>
    );
  }
}

render(<App />, document.getElementById("root"));

请在codesandbox中查看这个demo:demo link

现在的问题是,通过单击按钮从第一个工具提示更改后,第二个工具提示将无法按预期显示。第二个tooltip的位置神奇地移到了左上角,很奇怪。

感谢您的帮助。

【问题讨论】:

  • 你使用的是旧版本的material-ui-next
  • 没有。演示中的依赖:@material-ui/core 1.2.0; @material-ui/icons 1.1.0

标签: javascript reactjs material-ui


【解决方案1】:

试试这个。

import React from "react";
import { Tooltip } from "@material-ui/core";
import { CheckCircle, Error } from "@material-ui/icons";
import { green, deepOrange } from "@material-ui/core/colors";

class TooltipWrapper extends React.Component {
  render() {
    return (
      <Tooltip
        title={
          this.props.error.length === 0
            ? "meet all requirements"
            : "Not meet all requirements"
        }
        placement="bottom-start"
        id="test"
      >
        <span>
          {this.props.error.length === 0 ? (
            <CheckCircle style={{ color: green[400] }} aria-label="test" />
          ) : (
            <Error style={{ color: deepOrange[400] }} aria-label="test" />
          )}
        </span>
      </Tooltip>
    );
  }
}

export default TooltipWrapper;

工作沙盒版本。 https://codesandbox.io/s/w2zkn847m5

【讨论】:

  • 有效!男人。谢谢你的帮助。但是,为什么添加 来包装图标实际上有效?你能解释一下吗。是材质UI的bug吗?
  • 我认为这只是错误。我不清楚它是否正确,但我认为工具提示正在计算来自 dom 子节点的位置(顶部、右侧、底部、左侧),因此当我们更新状态时,我们正在删除子节点并再次添加它.那个时间工具提示应该重新计算位置(新的孩子),但它没有发生。所以我给了工具提示一个稳定的孩子(跨度)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-07
  • 2020-05-13
  • 2019-12-23
  • 1970-01-01
相关资源
最近更新 更多