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

Next.js14集成TONConnectUIProvider报错:TypeError: (0 , N.createContext) is not a function

问题:Next.js 14 + TONConnectUIProvider 报错 TypeError: (0 , N.createContext) is not a function

我正在使用Next.js 14、TypeScript和Telegram Open Network开发新应用,尝试在应用根节点使用TONConnectUIProvider时遇到问题。运行代码时出现错误:TypeError: (0 , N.createContext) is not a function。所有依赖均为最新版本(react "^18"、next "14.1"、tonconnect/ui-react "2.0.0"),我认为问题可能与版本兼容有关,或许TON Connect与Next.js 14适配不佳。

我的代码

layout.tsx

import type { Metadata } from "next";
import React from "react";
import { Inter } from "next/font/google";
import Script from "next/script";
import "../styles/globals.css";
import Providers from "./providers/Providers";
import Head from "next/head";
import { Html, Main, NextScript } from "next/document";

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

export const metadata: Metadata = {
  title: "Create Next App",
  description: "Generated by create next app",
};

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <Html lang="en">
      <Head>
        <meta
          httpEquiv="Cache-Control"
          content="no-cache, no-store, must-revalidate"
        />
        <meta httpEquiv="Pragma" content="no-cache" />
        <meta httpEquiv="Expires" content="0" />
        <Script
          src="https://telegram.org/js/telegram-web-app.js"
          strategy="beforeInteractive"
        />
      </Head>
      <body className={inter.className}>
        <Providers>{children}</Providers>
      </body>
    </Html>
  );
}

Providers.tsx

"use client";

import { TonConnectUIProvider } from "@tonconnect/ui-react";

const manifestUrl =
  "https://raw.githubusercontent.com/ton-community/tutorials/main/03-client/test/public/tonconnect-manifest.json";

export default function Providers({ children }: { children: React.ReactNode }) {
  return (
    <TonConnectUIProvider manifestUrl={manifestUrl}>
      {children}
    </TonConnectUIProvider>
  );
}

错误堆栈信息

TypeError: (0 , N.createContext) is not a function
    at 4786 (.next/server/app/page.js:1005:1028)
    at Function.t (.next/server/webpack-runtime.js:1:127)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async collectGenerateParams (/node_modules/next/dist/build/utils.js:919:21)
    at async /node_modules/next/dist/build/utils.js:1138:17
    at async Span.traceAsyncFn (/node_modules/next/dist/trace/trace.js:151:20)

> Build error occurred
Error: Failed to collect page data for /
    at /node_modules/next/dist/build/utils.js:1258:15
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
  type: 'Error'
}

解决方案

1. 调整@tonconnect/ui-react版本

v2.0.0版本可能与React 18/Next.js 14存在打包冲突,尝试降级到v1.x稳定版,或者升级到最新预发布版本测试:

# 降级到v1.x
npm install @tonconnect/ui-react@^1.0.0
# 或尝试最新测试版
npm install @tonconnect/ui-react@beta

2. 强化客户端渲染边界

在根布局中用Suspense包裹Providers,避免服务器端渲染时加载TONConnect的客户端依赖:

// 修改layout.tsx中的body部分
import { Suspense } from 'react';

// ...
<body className={inter.className}>
  <Suspense fallback={<div>加载中...</div>}>
    <Providers>{children}</Providers>
  </Suspense>
</body>

3. 清理重复的React依赖

检查项目是否存在多个React版本:

npm ls react

如果发现重复,清理依赖后重新安装:

rm -rf node_modules package-lock.json
npm install

4. 改用手动初始化方式

跳过TonConnectUIProvider,在客户端组件中手动初始化TONConnect:

// 新建TonConnectWrapper.tsx
"use client";
import { useEffect } from 'react';
import { TonConnectUI } from '@tonconnect/ui-react';

const manifestUrl = "你的manifest地址";

export default function TonConnectWrapper({ children }: { children: React.ReactNode }) {
  useEffect(() => {
    const tonConnectUI = new TonConnectUI({ manifestUrl });
    return () => tonConnectUI.destroy();
  }, []);

  return <>{children}</>;
}

之后在根布局中用该组件替代原Providers。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:07:08