Вопрос пользователя:
Jib,rf yf cnhjre const orders: TOrder[] = useSelector(feedSlice.selectors.getOrdersSelector); Ни одна перегрузка не соответствует этому вызову.
Перегрузка 1 из 2, "(selector: (state: { ingredients: TIngredientState; burgers: TBurgerState; feeds: TFeedState; user: TUserState; order: TOrderState; orders: TUserOrdersState; }) => TOrder[], equalityFn?: EqualityFn<...> | undefined): TOrder[]", возвратила следующую ошибку.
Аргумент типа "Selector<{ feed: TFeedState; }, TOrder[], []> & { unwrapped: (state: TFeedState) => TOrder[]; }" нельзя назначить параметру типа "(state: { ingredients: TIngredientState; burgers: TBurgerState; feeds: TFeedState; user: TUserState; order: TOrderState; orders: TUserOrdersState; }) => TOrder[]".
Типы параметров "state" и "state" несовместимы.
Свойство "feed" отсутствует в типе "{ ingredients: TIngredientState; burgers: TBurgerState; feeds: TFeedState; user: TUserState; order: TOrderState; orders: TUserOrdersState; }" и является обязательным в типе "{ feed: TFeedState; }".
Перегрузка 2 из 2, "(selector: (state: { ingredients: TIngredientState; burgers: TBurgerState; feeds: TFeedState; user: TUserState; order: TOrderState; orders: TUserOrdersState; }) => TOrder[], options?: UseSelectorOptions<...> | undefined): TOrder[]", возвратила следующую ошибку.
import { Preloader } from '@ui';
import { FeedUI } from '@ui-pages';
import { TOrder } from '@utils-types';
import { FC, useEffect } from 'react';
import { useDispatch, useSelector } from '../../services/store';
import feedSlice from '../../services/slices/feedSlice';
import { getFeeds } from '../../services/slices/feedSlice';
export const Feed: FC = () => {
/** TODO: взять переменную из стора */
// const orders: TOrder[] = [];
const orders: TOrder[] = useSelector(feedSlice.selectors.getOrdersSelector);
const dispatch = useDispatch();
useEffect(() => {
dispatch(getFeeds());
}, [dispatch]);
if (!orders.length) {
return <Preloader />;
}
<FeedUI orders={orders} handleGetFeeds={() => {}} />;
import {
createSlice,
createAsyncThunk,
PayloadAction,
nanoid
} from '@reduxjs/toolkit';
import { TOrdersData } from '@utils-types';
import { getFeedsApi } from '../../utils/burger-api';
import { get } from 'http';
import { TOrder } from '@utils-types';
export const getFeeds = createAsyncThunk(
'feed/getAllData',
getFeedsApi
);
type TFeedState = {
orders: TOrder[];
total: number;
totalToday: number;
loading: boolean;
error?: string | null;
};
const initialState: TFeedState = {
orders: [],
total: 0,
totalToday: 0,
loading: false,
error: ''
};
const feedSlice = createSlice({
name: 'feed',
initialState,
reducers: {},
extraReducers: (builder) => {
builder
.addCase(getFeeds.pending, (state) => {
state.orders = [];
state.total = 0;
state.totalToday = 0;
state.loading = true;
state.error = null;
})
.addCase(getFeeds.fulfilled, (state, action) => {
state.orders = action.payload.orders;
state.total = action.payload.total;
state.totalToday = action.payload.totalToday;
state.loading = false;
state.error = null;
})
.addCase(getFeeds.rejected, (state, action) => {
state.orders = [];
state.total = 0;
state.totalToday = 0;
state.loading = false;
state.error = 'Ошибка';
});
},
selectors: {
getOrdersSelector: (state) => state.orders,
getLoadingSelector: (state) => state.loading,
getFeedTotalSelector: (state) => state.total,
getFeedTotalTodaySelector: (state) => state.totalToday,
getErrorSelector: (state) => state.error
}
});
export const feedSliceReducer = feedSlice.reducer;
export default feedSlice;
Ответ нейросети:
Пройдите быструю авторизацию для просмотра: Войти через Google
Войти через Яндекс
Войти через VK
Ошибка возникает из-за того, что селектор getOrdersSelector
возвращает данные из состояния feed
, а не из состояния, которое ожидается в компоненте Feed
.
Чтобы исправить ошибку, вам нужно изменить селектор getOrdersSelector
в файле feedSlice
так, чтобы он возвращал данные из состояния feed
:
selectors: {
getOrdersSelector : ( state ) => state.feed.orders,
getLoadingSelector : ( state ) => state.feed.loading,
getFeedTotalSelector : ( state ) => state.feed.total,
getFeedTotalTodaySelector : ( state ) => state.feed.totalToday,
getErrorSelector : ( state ) => state.feed.error
}
После этого перезапустите приложение, и ошибка должна быть исправлена.