我 收到 错误 * * 未 捕获 的 TypeError :尝试 单击 导航 栏 上 的 项目 时 , 无法 读取 null ( 读取 " scrollIntoView " ) * * 的 属性 。
这 是 一 个 有点 棘手 的 问题 , 但 如果 我 从头 开始 加载 页面 , 它 将 抛出 上述 错误 。 然而 , 如果 我 再次 将 项目 保存 在 VSCode 中 , 它 将 完全 正常 工作 , 直到 我 刷新 页面 。 有 什么 办法 来 纠正 这个 问题 吗 ?
- 导航 栏 . jsx : * *
import { useState } from 'react';
import { Link } from 'react-router-dom';
import '../App.css';
import myAvatar from '../images/avataaars.png';
function Navbar() {
const aboutPage = document.getElementById('about');
const home = document.getElementById('home');
const skills = document.getElementById('skills');
const [navbar, setNavbar] = useState(true);
const handleNavbarToggle = (e) =>{
setNavbar(!navbar);
}
return(
<>
<div className='navbar-container'>
<Link to='/'><img src={myAvatar} className='nav-logo'/></Link>
<ul>
<li onClick={() =>{home.scrollIntoView({behavior: 'smooth'})}}>Home</li>
<li onClick={() =>{aboutPage.scrollIntoView({behavior: 'smooth'})}}>About</li>
<li onClick={() => {skills.scrollIntoView({behavior: 'smooth'})}}>Skills</li>
<li>Projects</li>
<li id='navbar-login-btn'>Login</li>
</ul>
<div className={`navbar-toggle ${navbar ? '' : 'open'}`} onClick={handleNavbarToggle}>
<span></span>
<span></span>
<span></span>
</div>
</div>
<div className={`navbar-header ${navbar ? 'navbar-header-hide' : ''}`}>
<ul>
<Link className='navbar-header-item' to='/'>Home</Link>
<Link className='navbar-header-item' to='/about'>About</Link>
<Link className='navbar-header-item' to='/skills'>Skills</Link>
<Link className='navbar-header-item' to='/projects'>Projects</Link>
<Link className='navbar-header-item' to='/login'>Login</Link>
</ul>
</div>
</>
)
}
export default Navbar;
中 的 每 一 个
- 应用 程序 js : * *
import { useState, useEffect } from 'react';
import { Route, Routes } from 'react-router-dom';
import TextTransition, { presets } from 'react-text-transition';
import './App.css';
import Navbar from './components/Navbar';
import Homepage from './components/Homepage';
import About from './components/About';
import Skills from './components/Skills';
import myAvatar from './images/avataaars.png';
function App() {
return (
<>
<Navbar />
<div className='homepage-container-web'>
<Homepage />
<About />
<Skills />
</div>
<div className='homepage-container-devices'>
<Routes>
<Route path='/' element={<Homepage />} />
<Route path='/about' element={<About />}/>
</Routes>
</div>
</>
);
}
export default App;
格式
- 关于 . jsx : * *
import '../App.css';
function About() {
return(
<>
<div className='about-container' id='about'>
<h2 class='about-title'>A little bit about me...</h2>
<p>Hi, my name is Andrew! I'm 20 years old, and I have <a href='https://www.crohnscolitisfoundation.org/what-is-crohns-disease' target="_blank" style={{color: '#a61bee'}}>Crohn's Disease</a>. Ever since I was 12 years old I have had an interest in technology, software engineering, cybersecurity, firefighting, and cars. I currently work for the Department of Defense and hold a Senior IT Specialist position. I am always looking to learn and improve myself.</p>
</div>
<div className='about-ending-container' />
</>
)
}
export default About;
格式
1条答案
按热度按时间cuxqih211#
问题 是 第 一 次 渲染 时
中 的 每 一 个
这些 元素 还 不 存在 。 最 简单 的 解决 方案 是 将 其 更改 为
格式
这样 它 就 可以 在 点击 的 时候 进行 搜索 。 这 不是 一 种 非常 " React " 的 方式 。 但是 它 应该 " 只是 工作 " 。
如果 你 想 以 " 正确 的 方式 " 完成 它 , 我 想 你 会 想 使用
useRef
, 并 将 其 提升 到 应用 程序 中 。 以 home 为 例 , 省略 不 相关 的 代码 , 它 将 是 这样 的 :格式