Behebung des Next.js 13-Fehlers: Fehlender React-Redux-Kontext; bitte schließen Sie die Komponente in <Provider> ein
P粉269847997
2023-08-16 15:42:17
<p>Ich möchte Daten von Redux verwenden, kann diesen Fehler jedoch nicht beheben. Ich habe also einen Anwendungsrouter in next.js 13 und möchte unter /settings/account auf meine Seite zugreifen. Dies ist meine Dateistruktur: </p>
<pre class="brush:php;toolbar:false;">--app
--Einstellungen
layout.jsx
page.jsx
--Konto
page.jsx
layout.jsx</pre>
<p>Ich möchte auf Benutzerdaten auf der Kontoseite zugreifen:</p>
<pre class="brush:php;toolbar:false;">import React from 'react'
import { useSelector } aus 'react-redux';
Standardfunktion AccountPage() exportieren {
const {info: userInfo} = useSelector(state => state.user);
const {name, id} = userInfo;
console.log(Name, ID)
zurückkehren (
<div>page</div>
)
}</pre>
<p>Aber ich habe die Fehlermeldung erhalten:<em>Fehler: Der React-Redux-Kontextwert konnte nicht gefunden werden. Bitte stellen Sie sicher, dass die Komponente in einen Provider eingeschlossen ist</em>. Ich dachte, die Verwendung eines Layouts zum Umbrechen der Seite würde das Problem lösen, also habe ich Folgendes getan: </p>
<pre class="brush:php;toolbar:false;">layout.jsx
„Client verwenden“
{store} aus „@/context/store“ importieren;
import { Provider } from „react-redux“;
Exportieren Sie die Standardfunktion AccountLayout({children }) {
zurückkehren (
<Provider store={store}>
{Kinder}
</Anbieter>
)
}</pre>
<p>Leider hilft das nicht. Das Layout der Einstellungs-/Kontoseite und der Einstellungsseite ist dasselbe, nur mit einem anderen Namen – SettingsLayout (ich dachte, das Root-Layout würde dieses Problem lösen). Die Einstellungsseite enthält nur einfaches HTML, keinen Code.
Wie kann ich dieses Problem lösen, ohne die <code>App</code>-Komponente einzuschließen? </p>
这是经过测试的方法;
在你的应用文件夹下添加一个名为redux-provider.js的新文件
在你的应用文件夹下添加另一个名为provider.tsx的文件,并实现ReduxProvider
在你的layout.tsx文件(应用文件夹的直接子组件)中实现Providers
现在我们可以从其他页面访问store。
更新
是的。但是!将根组件包装在ReduxProvider中并不意味着所有其他组件都是客户端组件。你仍然可以有服务器组件。如何做到?
在你的应用文件夹下添加一个名为experimental的新文件夹,然后在experimental文件夹下添加一个名为page.tsx的新文件。你可以从另一个文件中导入page.tsx文件的内容。
/experimental/page.tsx