我開始將CleverTap for Web Web SDK 快速入門指南集成到我的應用程式中Next.js
谷歌搜索后發現了一些包,例如clevertap-web-sdk,clevertap-react并決定使用clevertap-web-sdk npm包進行(集成)。按照檔案的方式(更具體地說,按照它的建議遵循React Example)但是有問題。
換了另一個包clevertap-react。這里也發現了同樣的問題。
參考錯誤:視窗未定義
_app.tsx
import React, { useEffect, useState } from "react";
import type { AppProps } from "next/app";
import { appWithTranslation } from "next-i18next";
import { Hydrate, QueryClient, QueryClientProvider } from "react-query";
import { ReactQueryDevtools } from "react-query/devtools";
import nextI18NextConfig from "../next-i18next.config.js";
import "tailwindcss/tailwind.css";
import "styles/globals.scss";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
import { useRouter } from "next/router";
import SvgPageLoading from "components/color-icons/PageLoading";
// import { PageLoading } from "components/color-icons/";
import { DefaultSeo } from 'next-seo';
import SEO from 'next-seo.config';
import ClevertapReact from 'clevertap-react';
ClevertapReact.initialize("TEST-61c-a12");
function MyApp({ Component, pageProps }: AppProps) {
const [queryClient] = React.useState(
() =>
new QueryClient({
defaultOptions: {
queries: {
refetchOnWindowFocus: false,
staleTime: Infinity,
},
},
})
);
const router = useRouter();
const [isAnimating, setIsAnimating] = useState(false);
useEffect(() => {
const handleStart = () => {
setIsAnimating(true);
};
const handleStop = () => {
setIsAnimating(false);
};
router.events.on("routeChangeStart", handleStart);
router.events.on("routeChangeComplete", handleStop);
router.events.on("routeChangeError", handleStop);
return () => {
router.events.off("routeChangeStart", handleStart);
router.events.off("routeChangeComplete", handleStop);
router.events.off("routeChangeError", handleStop);
};
}, [router]);
return (
<QueryClientProvider client={queryClient}>
<Hydrate state={pageProps.dehydratedState}>
<DefaultSeo {...SEO} />
<Component {...pageProps} />
{isAnimating && (
<div className="fixed top-0 left-0 flex items-center justify-center w-screen h-screen overflow-visible bg-white bg-opacity-80 z-overlay top-z-index">
<SvgPageLoading />
</div>
)}
<ReactQueryDevtools initialIsOpen={false} />
</Hydrate>
</QueryClientProvider>
);
}
export default appWithTranslation(MyApp, nextI18NextConfig);
uj5u.com熱心網友回復:
這是因為 Next 試圖在服務器上呈現您的組件,而服務器上不存在視窗物件。
你能試一下嗎:
import dynamic from 'next/dynamic'
const ClevertapReact = dynamic(
() =>
import("clevertap-react").then((clevertap) =>
clevertap.initialize("YOUR_ACCOUNT_ID")
),
{ ssr: false }
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/381496.html
標籤:javascript 反应 新产品经理 下一个.js 聪明的敲击
