首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactJS组件上的Redux show bootstrap工具提示

ReactJS组件上的Redux show bootstrap工具提示
EN

Stack Overflow用户
提问于 2019-02-11 12:52:13
回答 1查看 424关注 0票数 0

我正在尝试显示SVG组件的工具提示。对于工具提示,我尝试使用reactstap组件。

如果我在SVG中使用normal组件,它不会呈现SVG组件。

代码语言:javascript
复制
getServiceStatus = (serviceStatus, serviceName) => {
        return Object.keys(serviceStatus).map((date, index) => {
            const downTime = serviceStatus[date].filter(value => { return value === 0 }).length
            const color = downTime ? "#bcbe2a" : "#36b37e"
            const toolTipText = downTime ? date + "No DownTime report for this date" : date + " service was down for " + downTime

            return (
                <span key={index}>
                <rect key={date} id={serviceName+'-'+ index}  height="34" width="3" x={(index + 1) * 5} y="0" fill={color} />
                    <Tooltip placement="top" isOpen={this.props.toolTipOpen} target={serviceName+'-'+ index} toggle={this.toggleToolTip}>
                        {toolTipText}
                    </Tooltip>
                </span>
            )
        })
    }

如果我为SVGTooltip创建一个单独的组件,那么问题是,工具提示会显示两个不同组件的集合。

代码语言:javascript
复制
getServiceStatus = (serviceStatus, serviceName) => {
    return Object.keys(serviceStatus).map((date, index) => {
        const downTime = serviceStatus[date].filter(value => { return value === 0 }).length
        const color = downTime ? "#bcbe2a" : "#36b37e"
        const toolTipText = downTime ? date + "No DownTime report for this date" : date + " service was down for " + downTime

        return (
            <rect key={date} id={serviceName+'-'+ index}  height="34" width="3" x={(index + 1) * 5} y="0" fill={color} />
       )

    })
}

getToolTip = (serviceStatus, serviceName) => {
    console.log(serviceStatus.toString())
    return Object.keys(serviceStatus).map((date, index) => {
        const downTime = serviceStatus[date].filter(value => { return value === 0 }).length
        const toolTipText = downTime ? date + "No DownTime report for this date" : date + " service was down for " + downTime

        return (
            <span key={index}>
                <Tooltip placement="top" isOpen={this.props.toolTipOpen} target={serviceName+'-'+ index} toggle={this.toggleToolTip}>
                    {toolTipText}
                </Tooltip>
            </span>
        )
    })
}

https://codesandbox.io/s/8zzk6qq662

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-11 17:30:27

主要问题是您使用相同的状态打开所有的工具提示。解决这个问题的一种方法是使用工具提示id。

完整代码:https://codesandbox.io/s/2vv782j6z0

操作:

代码语言:javascript
复制
export function toogleToolTipAction(id) {
  console.log("toogleToolTipAction", id);
  return {
    type: "TOOGLE_TOOLTIP",
    id // here i'm using the tooltip id
  };
}

减速机:

代码语言:javascript
复制
case "TOOGLE_TOOLTIP":
  return {
    ...state,
    toolTipOpen: action.id // here i'm using the tooltip id
  };

容器:

代码语言:javascript
复制
const mapDispatchToProps = dispatch => {
  return {
    fetchServiceStatus: () => dispatch(getServiceStatusAction()),
    toogleToolTip: id => dispatch(toogleToolTipAction(id)), // here i'm using the tooltip id
    dummy: () => dispatch(toogleToolTipAction())
  };
};

组件:

代码语言:javascript
复制
  toggleToolTip = (id, e) => {
    if (e.type === "mouseout") {
      this.props.toogleTooltip(null);
    } else {
      this.props.toogleTooltip(id);
    }
  };

代码语言:javascript
复制
  return (
    <span key={index}>
      <Tooltip
        placement="top"
        isOpen={this.props.toolTipOpen === serviceName + "-" + index}
        target={serviceName + "-" + index}
        toggle={this.toggleToolTip.bind(this, serviceName + "-" + index)}
      >
        {toolTipText}
      </Tooltip>
    </span>
  );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54624134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档