Javascript 反应:如何在我无法控制的函数组件中使用引用(即从库中)

Javascript 反应:如何在我无法控制的函数组件中使用引用(即从库中),javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我不敢相信我在这个问题上找不到答案,所以如果我错了,请给我指出正确的方向 我正在尝试做一些简单的事情: 我包含了一个库中的函数组件 我需要一个裁判 关键是,React说: Ref-forwarding允许组件选择将任何子组件的Ref公开为自己的Ref 不幸的是,此库组件没有选择使用forwardRef 获取此元素的引用的正确方法是什么 下面的示例如下(简化): 功能外部链接(道具){ 返回( 但我认为这两种方法都不适用于我 有什么想法吗?你不能直接写。如果组件不是那样写的,就没有钩子可以让你进

我不敢相信我在这个问题上找不到答案,所以如果我错了,请给我指出正确的方向


我正在尝试做一些简单的事情:

我包含了一个库中的函数组件

我需要一个裁判

关键是,React说:

Ref-forwarding允许组件选择将任何子组件的Ref公开为自己的Ref

不幸的是,此库组件没有选择使用
forwardRef

获取此元素的引用的正确方法是什么

下面的示例如下(简化):

功能外部链接(道具){
返回(
但我认为这两种方法都不适用于我


有什么想法吗?

你不能直接写。如果组件不是那样写的,就没有钩子可以让你进去

我认为最好的办法是包装组件,捕获一个ref,然后使用DOM方法钻取其子级

const wrapperRef = useRef(null)
const innerRef = useRef(null)

useEffect(() => {
  if (wrapperRef.current) {
    innerRef.current = wrapperRef.current.querySelector('a')
    // innerRef.current is now the first <a> tag inside <OutboundLink>
  }
})

return <div>
  <div ref={wrapperRef}>
    <OutboundLink {...props}>
      {children}
    </OutboundLink>
  </div>
</div>
const wrapperRef=useRef(null)
const innerRef=useRef(空)
useffect(()=>{
if(包装参考电流){
innerRef.current=wrapperRef.current.querySelector('a')
//innerRef.current现在是第一个(查看控制台)


但事实上,这有点像黑客。你应该使用一个能更好地处理这个问题的组件。看看自己从头开始编写这个组件有多困难。这可能很简单,也很值得。

你不能直接编写。如果组件不是这样编写的,就没有钩子可以让你加入

我认为最好的办法是包装组件,捕获一个ref,然后使用DOM方法钻取其子级

const wrapperRef = useRef(null)
const innerRef = useRef(null)

useEffect(() => {
  if (wrapperRef.current) {
    innerRef.current = wrapperRef.current.querySelector('a')
    // innerRef.current is now the first <a> tag inside <OutboundLink>
  }
})

return <div>
  <div ref={wrapperRef}>
    <OutboundLink {...props}>
      {children}
    </OutboundLink>
  </div>
</div>
const wrapperRef=useRef(null)
const innerRef=useRef(空)
useffect(()=>{
if(包装参考电流){
innerRef.current=wrapperRef.current.querySelector('a')
//innerRef.current现在是第一个(查看控制台)


但实际上,这是一个小技巧。你应该使用一个能更好地处理这个问题的组件。看看自己从头开始编写这个组件有多困难。这可能很简单,也很值得。

你到底为什么需要ref?我想运行mixpanel.track\u links()哪一个需要一个指向a标记的ref?你到底为什么需要这个ref?我想运行mixpanel.track\u links()这需要一个标记的参考。谢谢,Alex。我最后确实撕掉了代码,因为,幸运的是,它没有任何依赖项。在我看来,它似乎不太可能完全陷入死胡同。但是,是的,你的破解听起来像是唯一的解决办法。撕掉代码确实很琐碎,值得一试!谢谢,Alex。我只是在最后撕掉了代码结束,因为,幸运的是,它没有任何依赖关系。在我看来,它不太可能完全处于死胡同。但是,是的,你的破解听起来像是唯一的解决办法。破解代码确实是微不足道的,值得一试!