尾风UI过渡组件+ React Spectrum覆盖不起作用

问题描述

沙盒: https://codesandbox.io/s/falling-brook-de970

包装React SpectrumTailwind Transition Component

问题useOverlayPosition使用两个引用,一个triggerRef和一个overlayRef来确定应该应用于弹出窗口的绝对位置。 / p>

没有过渡,定位就没有问题。

当我添加Transition component时,我注意到overlayRef并未在渲染后设置,因此不允许useOverlayPosition钩子确定要应用的正确定位道具。我认为这是因为state.isOpen为假,而Transition组件的子代尚未呈现。

随后在打开时按此按钮可解决此问题。

  1. 单击按钮继续问题。
  2. 打开按钮后单击即可解决问题,但我不明白为什么。

enter image description here

解决方法

使用callbackRef代替useRef解决了该问题。这样可以在分配参考后重新渲染组件。

useRef中,更新ref.current不会触发重新渲染,但会触发callbackRef

想法取自:https://reactjs.org/docs/hooks-faq.html#how-can-i-measure-a-dom-node

const [overlayRef,setOverlayRef] = React.useState<
    React.RefObject<HTMLElement>
  >({ current: null });

  const callbackRef = React.useCallback((node) => {
    if (node !== null) {
      setOverlayRef({ current: node });
    }
  },[]);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...