oct*_*eau 10 tailwind-css headless-ui
我正在使用 Transition 和 Dialog Headless UI 组件构建一个侧边栏。
当我分解 <Transition.Child> 之间传递的代码到它自己的组件时。我收到此错误:
Unhandled Runtime Error
Error: Did you forget to passthrough the `ref` to the actual DOM node?
Call Stack
eval
node_modules/@headlessui/react/dist/components/transitions/transition.js (1:3632)
Run Code Online (Sandbox Code Playgroud)
失败代码:
<Transition.Child as={Fragment}>
<Cart
cancelButtonReference={cancelButtonReference}
setCartOpen={setCartOpen}
checkoutUrl={checkoutUrl}
removeCartItem={removeCartItem}
clearCart={clearCart}
cartLoading={cartLoading}
incrementCartItem={incrementCartItem}
decrementCartItem={decrementCartItem}
cartTotal={cartTotal}
cart={cart}
/>
</Transition.Child>
Run Code Online (Sandbox Code Playgroud)
工作代码:
<Transition.Child as={Fragment}>
<div>
...
</div>
</Transition.Child>
Run Code Online (Sandbox Code Playgroud)
我理解我相信的错误,即当我将代码分解到它自己的组件 Transition.Child 时,它希望我传递一个 ref ,以便 React 知道它应该渲染一个组件而不是一个片段。
如果我删除 as={Fragment},这会使 Transition 默认为 div,错误就会消失,但随后我会得到一个不需要的 div..
我需要通过什么参考?这是我不明白的。
小智 5
您不需要传递引用,但组件需要接受引用并将其设置在实际元素上。该div元素将接受引用,这就是该方法起作用的原因。
尝试Cart使用创建组件React.forwardRef并在div.
const Cart = React.forwardRef((props, forwardedRef) => {
return (
<div ref={forwardedRef}>
...
</div>
)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6657 次 |
| 最近记录: |