【问题标题】:Set different React Popper tooltip for each element为每个元素设置不同的 React Popper 工具提示
【发布时间】:2021-09-29 10:15:32
【问题描述】:

我正在使用 React popper 在我的表单中显示输入字段的附加信息。问题是,当我显示超过 1 个元素的工具提示时,它会显示相同的工具提示。如何为每个字段显示不同的工具提示。

这是我在组件中使用的代码

https://codesandbox.io/s/hungry-gould-modgk?fontsize=14&hidenavigation=1&theme=dark

  // Popper Tooltip Props;
  const {
    getArrowProps,
    getTooltipProps,
    setTooltipRef,
    setTriggerRef,
    visible,
  } = usePopperTooltip({
    trigger: 'hover',
    placement: 'right',
    closeOnOutsideClick: false,
    visible: controlledVisible,
    onVisibleChange: setControlledVisible
  })
return (
                  <TextBox 
                    label="Title"
                    className="title-field"
                    name="title"
                    type="text"
                    isRequired={true}
                  />
                  <div className="field-info" ref={setTriggerRef}>
                    <Icon size="medium">
                      <FontAwesomeIcon icon={faInfoCircle} size="lg" />
                    </Icon>
                  </div>
                  {visible && (
                    <div
                      ref={setTooltipRef}
                      {...getTooltipProps({ className: 'tooltip-container' })}
                    >
                      Tooltip element
                      <div {...getArrowProps({ className: 'tooltip-arrow' })} />
                    </div>
                  )}

                  <TextBox 
                    label="Price"
                    className="price-field"
                    name="price"
                    type="text"
                    isRequired={true}
                  />
                   <div className="field-info" ref={setTriggerRef}>
                    <Icon size="medium">
                      <FontAwesomeIcon icon={faInfoCircle} size="lg" />
                    </Icon>
                  </div>
                  {visible && (
                    <div
                      ref={setTooltipRef}
                      {...getTooltipProps({ className: 'tooltip-container' })}
                    >
                      Tooltip element
                      <div {...getArrowProps({ className: 'tooltip-arrow' })} />
                    </div>
                  )}
)


  [1]: https://i.stack.imgur.com/oHuBA.png

【问题讨论】:

    标签: javascript reactjs popperjs


    【解决方案1】:

    每个工具提示都需要自己的可见状态变量。你能像这样创建自己的工具提示组件吗:

    const MyTooltip = ({tooltipText}) => {
    
        const [isVisible, setIsVisible] = useState(false)
    
        const {
            getArrowProps,
            getTooltipProps,
            setTooltipRef,
            setTriggerRef,
            visible,
          } = usePopperTooltip({
            trigger: 'hover',
            placement: 'right',
            closeOnOutsideClick: false,
            visible: isVisible,
            onVisibleChange: setIsVisible
          })
        return (
            <>
                <div className="field-info" ref={setTriggerRef}>
                    <Icon size="medium">
                        <FontAwesomeIcon icon={faInfoCircle} size="lg" />
                    </Icon>
                </div>
                {visible && (
                <div
                    ref={setTooltipRef}
                    {...getTooltipProps({ className: 'tooltip-container' })}
                >
                    {tooltipText}
                    <div {...getArrowProps({ className: 'tooltip-arrow' })} />
                </div>
                )}
            </>
        )
    }
      
    

    然后你可以像这样使用组件:

    <TextBox 
        label="Title"
        className="title-field"
        name="title"
        type="text"
        isRequired={true}
    />
    <MyTooltip tooltipText="Tooltip Element 1" />
    <TextBox 
        label="Price"
        className="price-field"
        name="price"
        type="text"
        isRequired={true}
    />
    <MyTooltip tooltipText="Tooltip Element 2" />
    

    【讨论】:

    • 不是正文。即使我更改了文本,它也会同时显示两个工具提示。
    • 哦,我明白了。那是因为您对两个工具提示使用了相同的“可见”状态。
    • 但是可见道具是通过usePopperTooltip函数接收的
    • 好吧,我没有使用过 React Popper,但你需要为每个 popper 设置一个“可见”状态变量,你必须跟踪它是否可见。也许您需要每个工具提示的 usePopperTooltip 。如果您向我展示有关此组件如何在您的应用中放置的更多上下文,我可能会了解更多
    • 所以 usePopperTooltip 返回 setTooltipRef、setTriggerRef 和一个可见的 State。您不能为超过 1 个元素复制此功能。
    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多