reactjs 为什么React滚动不能点击

jv4diomz  于 2023-01-30  发布在  React
关注(0)|答案(1)|浏览(127)

我使用链接导航到新页面,现在我做了一个页面的所有组件,它没有做任何点击。

import React, { useState } from 'react'
import cn from 'classnames'
// import Link from 'next/link'
import { Link } from "react-scroll"

import Logo from '../Logo/Logo'

import styles from './Layout.module.scss'

interface ILayoutProps {
    children: React.ReactNode
}

export default function Layout({ children }: ILayoutProps) {
const [activeTab, setActiveTab] = useState('Home')
const navigation = ['#Home', '#About', '#Portfolio', '#Contact']

console.log(activeTab);

return (
    <div>
        <nav className={styles.navContainer}>
            <Link to={'/#Home'}>
                <Logo />
            </Link>

            <ul className={styles.navItems}>
                {navigation.map((nav, index) => {
                    return (
                        <li key={index}>
                            <Link
                                to={`/${nav === '#Home' ? '/' : nav}`}
                                className={cn(styles.linkItem, {
                                    [styles.activeTab]: activeTab === nav
                                })}
                                onClick={() => {
                                    setActiveTab(nav)
                                    console.log(nav)
                                }}
                                spy={true}
                                smooth={true}
                                offset={50}
                                duration={500}
                            >
                                {nav.slice(1)}
                            </Link>
                        </li>
                    )
                })}
            </ul>

            <a className={styles.button} href='assets/Stas_Gavrilov_resume.txt' download>Resume</a>
        </nav>

        <main>{children}</main>
    </div>
)

}
我跟进了react-scroll上的文档,但它并没有帮助解决我的问题:(
它的意思是它不能瞄准section元素:

react_devtools_backend.js:4012 target Element not found
doinxwow

doinxwow1#

您需要删除链接组件中to属性上的/,因为您要滚动到的元素的id的ID不是**/#Home**,而是**#Home**。

<Link
  to={`${nav === "#Home" ? "/" : nav}`} // here
  ...
>

代替

<Link
  to={`/${nav === "#Home" ? "/" : nav}`}
  ...
>

注意,id需要匹配,因此您要滚动到的元素必须具有准确的id。
由于您的ID列表

const navigation = ["#Home", "#About", "#Portfolio", "#Contact"];

元素的id需要包含**#**

<>
  <section id="#Home">Home</section>
  <section id="#About">About</section>
  <section id="#Portfolio">Portfolio</section>
  <section id="#Contact">Contact</section>
</>

相关问题