如何从nextjs布局中提取脚本(next/script)到单独的组件中?

问题描述 投票:0回答:1

我在应用程序中使用应用程序路由和页面路由,需要为 VWO 添加脚本。 对于带有页面路由的页面,我添加到 _app : 从“next/script”导入脚本模块。

在 Script 标签上添加了这两个属性: 一个。 id =“vwo代码” b.策略=“交互之前” 3.在“dangerouslySetInnerHTML”属性中添加了脚本。

在带有应用程序路由器的页面中:

在layout.tsx文件中的RootLayout组件的head标签中直接添加了script标签。

在 script 标签上添加了这两个属性: 一个。 id =“vwo代码” b.类型=“文本/javascript” 3.在“dangerouslySetInnerHTML”属性中添加了脚本。

但现在如果可能的话我需要将其提取到一个单独的组件中。根部布局要干净整洁。

layout.tsx 的代码

const RootLayout = ({ children }: PropsWithChildren) => {
  return (
    <ReactQueryClientProvider>
      <html lang="en">
        <head> 
          <Script
            id="vwoCode"
            type="text/javascript"
            dangerouslySetInnerHTML={{
              __html: `
                <!-- Start VWO Async SmartCode -->
                <link rel="preconnect" href="" />
                <script >
               // code
                </script>
                <!-- End VWO Async SmartCode -->
            `,
            }}
          />
        </head>
        <body>
          
            <ReactQueryProvider>
            </ReactQueryProvider>
        </body>
      </html>
    </ReactQueryClientProvider>
  );
};

export default RootLayout;

_app.tsx 的代码

const App = ({ Component, pageProps }: AppPropsWithLayout) => {
  const getLayout = Component.getLayout || ((page) => <Layout>{page}</Layout>);

  return (
    <>
      <Script
        id="vwoCode"
        strategy="beforeInteractive"
        dangerouslySetInnerHTML={{
          __html: `
          <!-- Start VWO Async SmartCode -->
            <link rel="preconnect" href="" />
            <script >
          //code
            </script>
            <!-- End VWO Async SmartCode -->
          `,
        }}
      />

      <AuthProvider>
        ///
      </AuthProvider>
    </>
  );
};

export default api.withTRPC(App);

如何为脚本创建单独的组件并添加这两个文件?

next.js layout app-router dangerouslysetinnerhtml vwo
1个回答
0
投票

您可以创建一个组件 VWOScript.tsx,其内容如所附屏幕截图所示。 (请注意:account_id 具有虚拟值,您需要使用您的 account_id 更新该值)。

一旦添加到layout.tsx文件中,VWO SmartCode就不需要添加到_app.tsx中。所以这部分可以安全地跳过。 [在此输入图像描述][1] 可以参考此演示公共存储库以获取示例集成:https://github.com/Ragnarrlothbrok/tailnext-Test/blob/main/app/layout.tsx

© www.soinside.com 2019 - 2024. All rights reserved.