عباس باقری
عباس باقری
خواندن ۱ دقیقه·۲ سال پیش

چگونه از redux به همراه 13 nextjs استفاده کنیم

با تغییراتی که در nextjs نسخه 13 بوجود آمده است، نحوه استفاده از redux هم کمی متفاوت شده است.

برای شروع کار ابتدا redux را نصب می‌کنیم:

npm install @reduxjs/toolkit react-redux


سپس sliceها و store خود را ایجاد میکنیم. (شروع کار با redux toolkit)

فایل store.js :

import { configureStore } from &quot@reduxjs/toolkit&quot import counter from &quot./counterSlice&quot import { createSlice } from &quot@reduxjs/toolkit&quot iconst initialState:CounterState = { value:0, } const counterSlice = createSlice({ name: &quotcounter&quot, initialState, reducers:{ increment: (state,action) => { state.value += action.payload }, decrement: (state) => { state.value -= 1 }, } }); export const {increment , decrement} = counterSlice.actions; export default counterSlice.reducer; const store = configureStore({ reducer:{ counter, } }) ; export default store;


همان طور که می‌دانید برای استفاده از کتابخانه react-redux باید کامپوننتهای خود را درون کامپوننت Provider قرار دهیم. همچنین همان طور که میدانید در نسخه 13 فریمورک next.js علاوه بر تغییر در ساختار فایل‌ها پوشه app جایگزین پوشه pages شده است. درون نسخه 13 به سراغ فایل app/layout.js می‌رویم :

export default function RootLayout({ children }) { return (<html lang=&quoten&quot> <body > <Provider store={store}> {children} </Provider> </body> </html>); }

دقت کنید به دلیل اینکه layout درون سرور رندر می‌شود، ما نمی‌توانیم مانند کد بالا مستقیما از Provider درون فایل layout.js استفاده کنیم، پس یک کامپوننت سمت کلاینت ایجاد میکنم.

فایل ClientProvider را مانند نمونه ایجاد می‌کنیم :

&quotuse client&quot import store from &quot./store&quot import {Provider} from &quotreact-redux&quot export default ClientProvider({children}){ return(<Provider store={store}> {children} </Provider> }

اکنون ClientProvider را درون فایل layout.js را جایگزین Provider می‌کنیم:

import ClientProvider from &quot./ClientProvider&quot export default function RootLayout({ children }) { return (<html lang=&quoten&quot> <body > <Provider> {children} </Provider> </body> </html>); }

اکنون می‌توانیم از redux درون کامپوننتهای سمت client استفاده کنیم.

ما نمیتوانیم از هوکهای redux درون کامپوننتهای پردازش شده سرور استفاده کنیم.



reduxریداکسnextjs
برنامه نویس و طراح وب‌سایت
شاید از این پست‌ها خوشتان بیاید