Сервис быстрых ответов от искусственного интеллекта
Вопрос пользователя:
Ответ нейросети:
Проблема здесь заключается в том, что вы пытаетесь добавить селекторы к срезу (slice) как свойство, а не как часть определения среза. Для исправления этой проблемы вам нужно определить селекторы внутри функции createSlice
как часть определения среза. Вот как вы можете исправить ваш код:
import {
createSlice,
createAsyncThunk,
PayloadAction,
createSelector
} from '@reduxjs/toolkit';
import { TIngredient } from '../../utils/types';
import { getIngredientsApi } from '../../utils/burger-api';
type TIngredientState = {
ingredients: Array<TIngredient>;
loading: boolean;
error?: string | null;
};
const initialState: TIngredientState = {
ingredients: [],
loading: false,
error: ''
};
export const fetchIngredients = createAsyncThunk<TIngredient[]>(
'ingredients/getAll',
getIngredientsApi
);
const ingredientSlice = createSlice({
name:'ingredients',
initialState,
reducers: {},
extraReducers: (builder) => {
builder
.addCase(fetchIngredients.pending, (state) => {
state.loading = true;
state.error = null;
})
.addCase(fetchIngredients.rejected, (state, action) => {
state.loading = false;
state.error = action.error.message;
})
.addCase(
fetchIngredients.fulfilled,
(state, action: PayloadAction<TIngredient[]>) => {
state.loading = false;
state.ingredients = action.payload;
}
)
},
});
export const ingredientSliceReducer = ingredientSlice.reducer;
export const getIngredientsSelector = createSelector(
(state: { ingredients: TIngredientState }) => state.ingredients,
(ingredients) => ingredients.ingredients
);
export const getLoadingSelector = createSelector(
(state: { ingredients: TIngredientState }) => state.ingredients,
(ingredients) => ingredients.loading
);
export default ingredientSlice;
В этом исправленном коде я удалил определение селекторов из определения среза и добавил их как отдельные функции getIngredientsSelector
и getLoadingSelector
, используя функцию createSelector
из @reduxjs/toolkit
. Теперь у вас не должно быть проблем с типами параметров.
Обратите внимание: ответы, предоставляемые искусственным интеллектом, могут не всегда быть точными. Не рассчитывайте на них в критически важных областях, таких как медицина, юриспруденция, финансы или в вопросах, связанных с безопасностью. Для важных решений всегда обращайтесь к квалифицированным специалистам. Администрация сайта не несет ответственности за контент, сгенерированный автоматически.