gpt4 book ai didi

javascript - useRef() Hook 自定义组件

转载 作者:行者123 更新时间:2023-12-01 15:59:26 29 4
gpt4 key购买 nike

我正在尝试创建一个导航栏,当用户单击其中一个链接时,页面会滚动到某个部分。在上面的代码中,每个元素都是我页面的一部分:

    <Navbar scrollFunc={scrollToRef} />      
<Mainlogo ref={mainLogoRef} />
<Sales ref={salesRef} />
<Introduction ref={introductionRef} />
<Blog ref={blogRef} />
<Footer />


'refs' 被声明为如下,使用 useRef 钩子(Hook):
  const mainLogoRef = useRef(null)
const salesRef = useRef(null)
const introductionRef = useRef(null)
const blogRef = useRef(null)


我用来滚动的功能如下:
  const scrollToRef = ref => {
window.scrollTo({ top: ref.current.offsetTop, behavior: "smooth" })
}


问题是“当前”键始终未定义。当我做这样的事情时:
<div ref={salesRef}> <Sales  /><div>


或者
<section ref={salesRef}> <Sales  /><section>


一切正常。我假设 'ref' 仅适用于 html 'pure' 标签。有没有办法在自定义组件中使用“useRef” Hook ?

免责声明:抱歉英语不好,我不是母语人士。

最佳答案

在自定义组件上,ref需要forwarded .

一个例子是:

// inside Sales.js
const Sales = (props, ref) => (
<div ref={ref}> // assigns the ref to an actual DOM element, the div
/* anything you want to render here */
</div>
)

export default React.forwardRef(Sales);

这是因为 ref (通常)是对 DOM 元素的引用。一个 React 组件可以渲染多个 DOM 元素,所以你需要明确 ref 的位置。应分配给。

关于javascript - useRef() Hook 自定义组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61192450/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com