У меня есть простая функция редуктора
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { TSnackBarProps } from 'plugins/notification/NotificationContext';
import { MAX_STACK } from 'plugins/notification/NotificationsStack';
interface INotificationState {
notifications: TSnackBarProps[];
}
const initialState: INotificationState = {
notifications: [],
};
const notificationSlice = createSlice({
name: 'notification',
initialState,
reducers: {
addNewNotification(state, action: PayloadAction<TSnackBarProps>) {
const { notifications } = state;
const { payload: notification } = action;
if (notifications.find((n) => n.severity === notification.severity && n.key === notification.key)) {
return;
}
if (notifications.length >= MAX_STACK) {
notifications.splice(0, notifications.length - MAX_STACK);
}
state.notifications.push(notification);
},
},
});
export default notificationSlice.reducer;
Но он выдает ошибку, как показано ниже:
Я только начинаю писать этот редуктор и застрял здесь. Спасибо за вашу помощь.
Кроме того, TSnackBarProps — это просто тип SnackBarProps из material-ui с добавленным свойством серьезности.
Как это связано с набором инструментов Redux? Вы назначаете readonly string[]
вместо string[]
@ b3hr4d Добавлен полный код.
Тип immer
Draft
, который используется RTK, временно удаляет readonly
из всех типов состояний, чтобы вы могли свободно изменять его. К сожалению, в данном случае это заходит слишком далеко.
Но, конечно: здесь вы знаете лучше, чем TypeScript. Таким образом, вы можете просто привести свою переменную состояния, которая Draft<INotificationState>
в данный момент INotificationState
для назначения ей, что вполне допустимо в такой ситуации.
Вы должны предоставить больше деталей, таких как интерфейсы и действия и многое другое. и я думаю, что ваш редуктор выглядит странно!