【问题标题】:Correct way to use ref with Next.js for a Link and an <a>?将 ref 与 Next.js 一起用于链接和 <a> 的正确方法?
【发布时间】:2021-04-27 10:50:19
【问题描述】:

我正在尝试使用 GSAP 为菜单元素设置动画。

我正在使用像 useRef 这样的钩子,它适用于作为外部网站链接的 &lt;a&gt; 元素,但不适用于内部路由的 &lt;Link&gt; 元素。

菜单:

<nav>
    <ul>
        <li>
            <Link
              onMouseEnter={e => handleHover(e)}
              onMouseOut={e => handleHoverExit(e)}
              ref={line1} href="/nouveautes"> Nouveautés</Link>
        </li>
        <li>
            <Link
              onMouseEnter={e => handleHover(e)}
              onMouseOut={e => handleHoverExit(e)} ref={line2} href="/catalogue"> Catalogue</Link>
        </li>
        <li>
            <a
               onMouseEnter={e => handleHover(e)}
               onMouseOut={e => handleHoverExit(e)} ref={line3} 
               href="https://shop.paradisepapers.fr/"> Diffusion</a>
        </li>
        <li>
            <Link
              onMouseEnter={e => handleHover(e)}
              onMouseOut={e => handleHoverExit(e)} ref={line4} 
              href="/contacts"> Contacts</Link>
        </li>
        <li>
            <a
              onMouseEnter={e => handleHover(e)}
              onMouseOut={e => handleHoverExit(e)} ref={line5} 
              href="https://cmeditions.us17.list-manage.com/subscribe/post?u=385cdf2c81c2f3bdd2ff1583e&amp;id=fa0ff0c34e"> Newsletter</a>
        </li>
    </ul>
</nav>

GSAP 功能:

const handleHover = e => {
    gsap.to(e.target, {
      duration: 0.3,
      y: 3,
      skewX: 4,
      ease: 'power3.inOut'
    });
};

const handleHoverExit = e => {
    gsap.to(e.target, {
      duration: 0.3,
      y: -3,
      skewX: 0,
      ease: 'power3.inOut'
    });
}

使用参考:

let line1 = useRef();
let line2 = useRef();
let line3 = useRef();
let line4 = useRef();
let line5 = useRef();

【问题讨论】:

    标签: javascript reactjs next.js gsap use-ref


    【解决方案1】:

    next/link 组件仍然需要您将子元素传递给它。您可以将 &lt;a&gt; 作为子级添加到您的 &lt;Link&gt; 中,然后应用 ref 并对其进行回调。

    <nav>
        <ul>
            <li>
                <Link href="/nouveautes">
                    <a onMouseEnter={e => handleHover(e)} onMouseOut={e => handleHoverExit(e)} ref={line1}>
                        Nouveautés
                    </a>
                </Link>
            </li>
            <!-- remaining code -->
        </ul>
    </nav>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-10
      • 2011-04-30
      • 1970-01-01
      • 2015-10-05
      • 2014-08-30
      • 2011-10-05
      • 2015-03-18
      相关资源
      最近更新 更多