Как вызвать функцию из одного редьюсера в другом?

  • 29 августа 2023 г. 21:26
Ответы на вопрос 1
Для вызова функции из одного редьюсера в другом в Redux Toolkit можно воспользоваться специальной функцией под названием `extraReducers`. 

В вашем случае, чтобы вызвать функцию `showChat()` из среза `modalSlice` в функции `fetchData.fulfilled` среза `userSlice`, можно сделать следующее:

1. В срезе `modalSlice` определите экшен, в котором будет вызываться функция `showChat()`. Например:

```javascript
import { createSlice } from "@reduxjs/toolkit";

const modalSlice = createSlice({
  name: "modal",
  initialState: initialState,
  reducers: {
    showChat: (state) => {
      // Ваша логика для отображения чата
    },
  },
});

export const { showChat } = modalSlice.actions;
export default modalSlice.reducer;
```

2. В срезе `userSlice` добавьте `extraReducers`, где определите `fulfilled`-кейс для экшена `fetchData`. В этом кейсе вызовите функцию `showChat()` из среза `modalSlice`. Например:

```javascript
import { createSlice } from "@reduxjs/toolkit";
import { fetchData } from "./userActions";
import { showChat } from "./modalSlice";

const userSlice = createSlice({
  name: "user",
  initialState: initialState,
  reducers: {},
  extraReducers: (builder) => {
    builder.addCase(fetchData.fulfilled, (state, action) => {
      // Ваша логика обработки успешного выполнения fetchData

      // Вызываем функцию showChat() из modalSlice
      showChat();
    });
  },
});

export default userSlice.reducer;
```

Обратите внимание, что для правильной работы этого подхода требуется, чтобы срез `modalSlice` был подключен как обычный редьюсер в вашем хранилище Redux. В противном случае, функция `showChat()` не будет доступна из `userSlice`.

Также, в `extraReducers` можно использовать и другие кейсы, такие как `rejected` или `pending` для обработки других состояний выполнения асинхронных запросов.
Похожие вопросы