Задать вопрос
@JeanPaulBelmondo

Можно ли в redux toolkit передать параметр в middleware?

Можно вообще передавать туда параметры? И, если да, то как?
Допустим обычный logger

spoiler

export const setupStore = () => configureStore({
    reducer: rootReducer,
    middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(logger),
})



import { Middleware } from '@reduxjs/toolkit';

export const logger: Middleware = () => next => action => {
    const someType = 'someType';

    if (action.type === someType) {
         alert('blabla');
    }

    return next(action);
}


я бы хотел сделать someType динамическим, чтобы вынести middleware в пакет и подключать в разных приложениях с нужным параметром
  • Вопрос задан
  • 175 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@5465
Да, в Redux Toolkit можно передавать параметры в middleware. Для этого можно определить middleware-функцию, которая возвращает другую функцию, которая уже принимает параметры.

Например, для динамической передачи параметра в ваш logger middleware, вы можете определить функцию createLoggerMiddleware, которая будет принимать параметр someType и возвращать middleware-функцию, которая будет использовать этот параметр:

export const createLoggerMiddleware = (someType: string): Middleware => {
  return () => next => action => {
    if (action.type === someType) {
      alert('blabla');
    }
    return next(action);
  };
};


Теперь в setupStore вы можете вызвать createLoggerMiddleware и передать нужный параметр:

export const setupStore = () => configureStore({
  reducer: rootReducer,
  middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(createLoggerMiddleware('someType')),
});


Таким образом, вы сможете динамически настраивать middleware, когда они используются в разных приложениях.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект