You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未修改代码突发异常: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 04:58:13