Correction de l'erreur Next.js 13 : contexte de réaction-redux manquant ; veuillez envelopper le composant dans <Provider>
P粉269847997
2023-08-16 15:42:17
<p>Je souhaite utiliser les données de Redux mais je ne parviens pas à résoudre cette erreur. J'ai donc un routeur d'application dans next.js 13 et je souhaite accéder à ma page sur /settings/account. Voici la structure de mes fichiers : </p>
<pre class="brush:php;toolbar:false;">--app
--paramètres
mise en page.jsx
page.jsx
--compte
page.jsx
layout.jsx</pre>
<p>Je souhaite accéder aux données utilisateur sur la page du compte :</p>
<pre class="brush:php;toolbar:false;">importer React depuis 'react'
importer { useSelector } depuis 'react-redux' ;
exporter la fonction par défaut AccountPage() {
const {info : userInfo} = useSelector(state => state.user);
const {nom, identifiant} = userInfo ;
console.log(nom, identifiant)
retour (
<div>page</div>
)
}</pré>
<p>Mais j'ai eu l'erreur :<em>Erreur : impossible de trouver la valeur de contexte de réaction-redux ; veuillez vous assurer que le composant est enveloppé dans un fournisseur</em>. Je pensais qu'utiliser une mise en page pour envelopper la page résoudrait le problème, j'ai donc fait ceci : </p>
<pre class="brush:php;toolbar:false;">layout.jsx
"utiliser le client"
importer {store} depuis "@/context/store" ;
importer { Fournisseur } depuis "react-redux" ;
exporter la fonction par défaut AccountLayout({ children }) {
retour (
<Magasin du fournisseur={magasin}>
{enfants}
</Fournisseur>
)
}</pré>
<p>Malheureusement, cela n’aide pas. La disposition de la page des paramètres/compte et de la page des paramètres est la même, juste avec un nom différent - SettingsLayout (je pensais que la disposition racine résoudrait ce problème). Quant à la page des paramètres, elle contient simplement du HTML brut, pas de code.
Comment puis-je résoudre ce problème sans envelopper le composant <code>App</code> </p>
Il s'agit d'une méthode testée ;
Ajoutez un nouveau fichier appelé redux-provider.js sous votre dossier d'application
Ajoutez un autre fichier appelé supplier.tsx sous votre dossier d'application et implémentez ReduxProvider
Implémentez les fournisseurs dans votre fichier layout.tsx (sous-composant direct du dossier de l'application)
Nous pouvons désormais accéder à la boutique depuis d'autres pages.
Mise à jour
Oui. mais! Encapsuler le composant racine dans un ReduxProvider ne signifie pas que tous les autres composants sont des composants clients. Vous pouvez toujours avoir des composants serveur. Comment faire?
Ajoutez un nouveau dossier nommé expérimental sous votre dossier d'application, puis ajoutez un nouveau fichier nommé page.tsx sous le dossier expérimental. Vous pouvez importer le contenu du fichier page.tsx à partir d'un autre fichier.
/experimental/page.tsx