Heim  >  Fragen und Antworten  >  Hauptteil

Behebung des Next.js 13-Fehlers: Fehlender React-Redux-Kontext; bitte schließen Sie die Komponente in <Provider> ein

<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>
P粉269847997P粉269847997452 Tage vor465

Antworte allen(1)Ich werde antworten

  • P粉515066518

    P粉5150665182023-08-17 11:47:45

    这是经过测试的方法;

    在你的应用文件夹下添加一个名为redux-provider.js的新文件

    "use client";
    
    import { PropsWithChildren } from "react";
    
    import { Provider } from "react-redux";
    import { store } from "../store/store"; // 请调整路径
    
    export default function ReduxProvider({ children }: PropsWithChildren<any>) {
        return (
            <Provider store={store}>
                {children}
            </Provider>
        );
    }

    在你的应用文件夹下添加另一个名为provider.tsx的文件,并实现ReduxProvider

    "use client";
    
    import { PropsWithChildren } from "react";
    
    import ReduxProvider from "./redux-provider";
    
    export default function Providers({ children }: PropsWithChildren<any>) {
        return (
            <ReduxProvider>
                {children}
            </ReduxProvider>
        );
    }

    在你的layout.tsx文件(应用文件夹的直接子组件)中实现Providers

    import React from "react";
    
    import Providers from './provider';
    
    export default function RootLayout({
       children,
    }: {
        children: React.ReactNode;
    }) {
        return (
            <html lang="en">
                <body>
                    <Providers>
                        {children}
                    </Providers>
                </body>
            </html>
        );
    }

    现在我们可以从其他页面访问store。

    更新

    是的。但是!将根组件包装在ReduxProvider中并不意味着所有其他组件都是客户端组件。你仍然可以有服务器组件。如何做到?

    在你的应用文件夹下添加一个名为experimental的新文件夹,然后在experimental文件夹下添加一个名为page.tsx的新文件。你可以从另一个文件中导入page.tsx文件的内容。

    /experimental/page.tsx

    import HomePage from "../index"; // 这是一个在其中使用redux的客户端组件
    
    export default async function Page() { // 这是一个服务器组件
        return <HomePage />;
    }

    Antwort
    0
  • StornierenAntwort