Rumah  >  Soal Jawab  >  teks badan

标题重写为:Tidak pasti jika Nextjs mengesan _app.js; Ralat: useSession mesti dibungkus dalam <SessionProvider />

<p>Saya telah mengikuti beberapa tutorial tentang Nextjs, Prisma dan Auth0. Masalah saya ialah, selepas cuba mencipta butang log masuk/log keluar pada pengepala (dengan menambahkan <kod>import { useSession,logIn,logKeluar } daripada "next-auth/react" </code> kepada <code> header .js</code>), ralat berikut berlaku dalam next.js<code>Ralat: [next-auth]: `useSession` mesti dibungkus dalam <SessionProvider /></code>. Saya cuba mencipta fail <code>_app.js</code> dalam folder root, kemudian di <code>/pages/_app.js</code> dan akhirnya di <code>/app/_app Created at .js</code>. Tiada satu pun daripada ini berfungsi. </p> <p>Ini ialah kandungan fail<code>_app.js saya: </code></p> <pre class="brush:php;toolbar:false;">import { SessionProvider } daripada "next-auth/react" eksport fungsi lalai Apl({ komponen, pageProps: { session, ...pageProps }, }) { kembali ( <SessionProvider session={session}> <Komponen {...pageProps} /> </SessionProvider> ) }</pre> <p>Bagaimanakah saya hendak memastikan Next mengesan dan menggunakannya? Saya fikir fail itu diabaikan sedikit sebanyak. </p> <p>Saya cuba menukar lokasi fail <code>_app.js</code> daripada folder akar projek kepada <code>/pages/_app.js</code> app/_app.js</code> Saya juga cuba memadamkan folder <code>.next</code> dan menjalankan semula pelayan tetapi ia tidak berjaya. </p> <p><strong>Kemas kini 1: </strong> Versi Next.js yang saya gunakan: v13.4.4</p> <p><strong>Kemas kini 2: </strong> Saya telah menambahkan fungsi <code>console.log()</code> pada fail <code>_app.js</code> <code>_app.js</code> Adakah pengesanan normal atau ada masalah? </p> <p><strong>Saya (semacam) membetulkannya! Semak jawapan saya di bawah. Tetapi ia tidak berfungsi apabila digunakan ke Vercel. </strong></p>
P粉771233336P粉771233336436 hari yang lalu609

membalas semua(1)saya akan balas

  • P粉966979765

    P粉9669797652023-09-04 23:19:18

    Saya rasa saya telah menyelesaikan masalah ini, saya memutuskan untuk melupakan _app.js dan meletakkan semuanya dalam fail layout.js tersuai saya. Saya masih perlu menguji sama ada pengguna akan kekal log masuk kerana header.js berada di luar layout.js.

    Bagaimana saya menyelesaikannya: Saya menambah

    'use client'
    import { SessionProvider } from "next-auth/react";

    kepada layout.js (fail yang disertakan dengan Next.js secara lalai) dan lulus sesi dalam parameter fungsi yang "dieksport" (fungsi lalai RootLayout dieksport). Kemudian saya membungkus semua parameter return() dengan .

    Ini adalah sebahagian daripada kod:

    export default function RootLayout({ children, session }) {
      return (
        <html lang="en">
          <SessionProvider session={session}>
            <body>{children}</body>
          </SessionProvider>
        </html>
      )
    }

    BAHAGIAN PENTING: Jika anda menggunakan 'use client'选项,Next将不允许您导出元数据,因此您需要删除< code>从代码中导出 const 元数据 = {....

    KEMASKINI: Atas sebab tertentu ia tidak berfungsi pada Vercel (walaupun ia dijalankan secara tempatan). Saya akan cuba membetulkannya dan mengemas kini jawapan saya. TL;DR: Penyelesaian ini berfungsi secara tempatan tetapi tidak berfungsi apabila digunakan ke Vercel.

    balas
    0
  • Batalbalas