未修改代码突发异常:Next.js应用布局错乱、组件消失求助
问题描述
我的Next.js应用此前运行完全正常,但今早执行npm run dev启动项目时,未修改任何代码却出现严重问题:所有组件布局混乱,原本左侧是图片和文本、右侧是两个带文本的滚动视频的中间组件完全失效,部分组件从屏幕上消失,同时CSS样式也出现错乱。多次撤销操作确认没有误删代码,但问题依然存在。
相关代码
'use client'; import '@coinbase/onchainkit/styles.css'; import OnchainProviders from './OnchainProviders'; import SwapComponents from './SwapComponents'; import './globals.css'; import Image from 'next/image'; import logo from './logo.png'; import datapics from './stats.png'; import GreenDot from './GreenDot'; import PriceUpdater from './PriceUp'; import Data1 from './stats'; import Data2 from './statsTw'; import Data3 from './chart'; import GifLikeVideo from './gifVid'; import coin from './coin.png' import { useEffect, useRef, useState } from 'react'; import {WalletComponents} from './WalletComponents'; const App = () => { const [showInception, setShowInception] = useState(false); const [isSticky, setIsSticky] = useState(false); const summaryRef = useRef(null); const rightContentRef = useRef(null); const headerRef = useRef(null); useEffect(() => { const handleScroll = () => { if (summaryRef.current && rightContentRef.current) { const summaryRect = summaryRef.current.getBoundingClientRect(); const rightContentRect = rightContentRef.current.getBoundingClientRect(); const windowHeight = window.innerHeight; const scrollProgress = (windowHeight - summaryRect.top) / (rightContentRect.height - windowHeight); setShowInception(scrollProgress > 0.4); } if (headerRef.current) { const headerRect = headerRef.current.getBoundingClientRect(); const originalPosition = 150; setIsSticky(window.scrollY > originalPosition); } }; window.addEventListener('scroll', handleScroll); return () => window.removeEventListener('scroll', handleScroll); }, []); return ( <OnchainProviders> <WalletComponents /> <div className={`font-mono flex flex-col items-center min-h-screen relative`}> <div ref={headerRef} className={`flex items-center transition-all duration-300 ${ isSticky ? 'fixed top-4 left-4 z-50 transform scale-90' : 'relative mt-[150px]' }`} > <div style={{ marginRight: '1rem', transform: 'translateX(9px)'}}> <GreenDot /> </div> <div style={{ marginRight: '0.5rem' }}> <Image src={pic.src} alt="Frame" width={40} height={40} /> </div> <PriceScript /> </div> {isSticky && <div style={{ height: '150px' }} />} <SwapComs /> <div className="w-full flex justify-center relative"> <div className="sticky top-0 left-0 w-1/2 h-screen flex flex-col items-center justify-center" ref={summaryRef}> <Image src={logo.src} alt="Stats" width={260} height={260} /> <p className="font-mono text-xl mt-8"> Slogan here </p> </div> <div className="w-1/2 flex flex-col items-center" ref={rightContentRef}> <div className="h-[90vh] w-full flex flex-col items-center justify-center"> <div className="flex flex-col items-center mt-[-10vh]"> <GifLikeVideo src="/Vid.mp4" width={440} height={160} /> <p> <span style={{ fontWeight: 500,fontSize: '1.2rem' ,textShadow: '0 0 0.5px currentColor'}} className="text-2xl">Title</span> This is where text one will go. </p> </div> </div> <div className={`h-[90vh] w-full flex flex-col items-center justify-center transition-opacity duration-500 ${showInception ? 'opacity-100' : 'opacity-0'}`}> <div className="flex flex-col items-center mt-[-30vh]"> <GifLikeVideo src="/Vid2.mp4" width={400} height={120} /> <p> <span style={{ fontWeight: 500 ,fontSize: '1.2rem',textShadow: '0 0 0.5px currentColor'}} className="text-2xl">Title2</span> This is where text two will go. </p> </div> </div> </div> </div> <div className="w-full flex flex-col items-center mt-0"> <Image src={datapics.src} alt="Stats" width={400} height={400} /> <div className="flex flex-row justify-center space-x-4 mt-6"> <div className="relative" style={{ top: '-30px', left: '-120px' }}> <Data1 /> </div> <div className="relative" style={{ top: '-15px', left: '-20px' }}> <Data2 /> </div> <div className="relative" style={{ top: '-270px', right: '-120px' }}> <Data3 curveControlX={60} curveControlY={120} dotPositionX={50} dotPositionY={25} /> </div> </div> </div> </div> </OnchainProviders> ); }; export default App;
排查与修复建议
- 修复代码拼写错误:代码里存在明显的组件引用错误,直接导致渲染失败和布局错乱:
- 将
<SwapComs />改为<SwapComponents />(对应导入的SwapComponents) - 将
<PriceScript />改为<PriceUpdater />(对应导入的PriceUpdater) - 将Image组件的
src={pic.src}改为src={coin.src}(pic未定义,已导入coin但未使用)
- 将
- 回滚依赖版本:如果自动执行了
npm install,可能导致依赖包(如Next.js、Tailwind CSS、onchainkit)版本更新引发兼容性问题。恢复之前的package-lock.json或yarn.lock文件,再执行npm ci安装固定版本依赖。 - 清除Next.js缓存:删除项目根目录下的
.next文件夹,重新启动项目:rm -rf .next && npm run dev - 检查Tailwind配置:确认
tailwind.config.js中的content数组包含所有组件文件路径,避免样式无法正确生成。 - 强制刷新浏览器缓存:使用
Ctrl+Shift+R(Windows/Linux)或Cmd+Shift+R(Mac)强制刷新页面,清除旧的静态资源缓存。
内容的提问来源于stack exchange,提问作者Stavros Cotsoradis
相关产品推荐
相关产品推荐

