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

Next.js技术求助:useEffect钩子从未执行

问题:Next.js中Context Provider的useEffect不执行,组件重复渲染

我在Next.js应用里集成socket.io,遇到问题后把代码精简到基础版本排查,结果更困惑了。我将socket放在根布局<body>直接子元素的Context Provider中以包裹整个应用(此前存在socket无限新建连接问题),已精简Provider代码。

当前问题:控制台打印三次******************* render socket provider *******************,但******************* socket provider useEffect *******************从未输出。后续在首页添加useEffect,该钩子同样未执行。


相关代码

根布局文件

import { SocketProvider } from "../hooks/useSocket";
import "./globals.css";

export const metadata = {
  title: "Title",
  description: "Description",
};

export default function RootLayout({
  children,
}: { children: React.ReactNode; }) {
  return (
    <html lang="en">
      <body>
        <SocketProvider>
          <> {children}</>
        </SocketProvider>
      </body>
    </html>
  );
}

初始首页

import { Inter } from "next/font/google";

const inter = Inter({ subsets: ["latin"] });

export default function Home() {
  return (
    <main className="relative h-full flex-grow">
      <p>empty page</p>
    </main>
  );
}

Context Provider代码

"use client";

import React, {
  createContext,
  useContext,
  useEffect,
} from "react";

type SocketContextProps = {};

const SocketContext = createContext<SocketContextProps>({});

export const SocketProvider = ({ children }: { children: JSX.Element }) => {
  console.log(
    "******************* render socket provider *******************"
  );

  useEffect(() => {
    console.log(
      "******************* socket provider useEffect *******************"
    );
  }, []);

  return (
    <SocketContext.Provider value={{}}>
      {children}
    </SocketContext.Provider>
  );
};

export default function useSocket() {
  return useContext(SocketContext);
}

修改后的首页

"use client";

import { useEffect } from "react";

export default function GameHome() {
  console.log("^^^^^^^ Home Page ^^^^^^^^^");

  useEffect(() => {
    console.log("$$$$$$$$ Home page useEffect $$$$$$$$$$");
  }, []);

  return (
    <main className="relative h-full flex-grow">
      <p>empty page</p>
    </main>
  );
}

控制台输出

wait  - compiling...
wait  - compiling /[game-slug]/page (client and server)...
event - compiled client and server successfully in 6.1s (634 modules)
******************* render socket provider *******************
******************* render socket provider *******************
^^^^^^^ Home Page ^^^^^^^^^
******************* render socket provider *******************

内容的提问来源于stack exchange,提问作者Tsabary

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:57:21