Je travaille sur le livre de David Lorenz Building Production-Grade Web Applications with Supabase (lien affilié) et je viens de terminer le Chapitre 3 – Création des pages de gestion des tickets…. J'ai rencontré quelques problèmes et j'ai pensé les partager avec la façon dont je les ai résolus.
Vous pouvez ignorer pageProps.children et le laisser comme enfants.
Même si Lorenz déclare explicitement :
Alors, ouvrez app/page.js et modifiez le composant Page afin qu'il renvoie uniquement le composant Connexion pour l'instant…
J'ai encore dû aller chercher par moi-même la prochaine fois que j'ai rencontré des instructions pour modifier la page de connexion. Je m'attendais à ce que nous créions une nouvelle page plutôt que d'utiliser le page.js existant, mais non, effacez tout dans page.js et collez uniquement le code LoginPage comme indiqué dans le livre.
Une fois que nous avons mis à jour app/Login.js avec la logique de bascule (pour activer/désactiver le champ de mot de passe), nous commençons à voir cette erreur :
Error: Route "/" used `searchParams.magicLink`. `searchParams` should be awaited before using its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis at LoginPage (src/app/page.js:3:38) 1 | import { Login } from "./Login"; 2 | export default function LoginPage({ searchParams }) { > 3 | const wantsMagicLink = searchParams.magicLink === "yes"; | ^ 4 | return <login ispasswordlogin="{!wantsMagicLink}"></login>; 5 | }
Pour résoudre ce problème, nous souhaitons rendre la fonction LoginPage dans app/page.js asynchrone comme ceci :
import { Login } from "./Login"; export default async function LoginPage({ searchParams }) { const params = await searchParams; const wantsMagicLink = params.magicLink === "yes"; return <login ispasswordlogin="{!wantsMagicLink}"></login>; }
Dans le livre, il nous est demandé de mettre à jour notre code dans Login.js comme ceci :
"use client"; import { useRef } from "react"; export const Login = () => { const emailInputRef = useRef(null); const passwordInputRef = useRef(null); return ( ... ) }Copier après la connexionCopier après la connexion
Juste au cas où cela ne serait pas tout à fait clair, voici à quoi devrait ressembler votre code :
"use client"; import { useRef } from "react"; import Link from "next/link"; export const Login = ({ isPasswordLogin }) => { const emailInputRef = useRef(null); const passwordInputRef = useRef(null); return( ... ) }
Où est le... nous ne changeons rien. Essentiellement, tout depuis le retour reste exactement le même qu'avant.
La « grande chose » que je souligne ci-dessus est qu'il ne faut pas supprimer le lien d'importation de « suivant/lien » ; ajoutez plutôt « utiliser le client » ; et l'importation useRef avant.
Remarque : nous l'apprendrons peut-être plus tard, mais je trouve un peu étrange d'utiliser useRef au lieu de useState ici, mais là encore, je ne suis pas un expert de Next.js ou de React.
Dans Login.js dans le return( ... ), remplacez le
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!