Сервис быстрых ответов от искусственного интеллекта
Вопрос пользователя:
import { FC, useMemo, useEffect } from 'react';
import { Preloader } from '../ui/preloader';
import { OrderInfoUI } from '../ui/order-info';
import { TIngredient } from '@utils-types';
import { title } from 'process';
import { useSelector, useDispatch } from '../../services/store';
import ingredientSlice from '../../services/slices/ingredientSlice';
import orderSlice from '../../services/slices/orderSlice';
import { useParams } from 'react-router-dom';
import { getOrderByNumber } from '../../services/slices/orderSlice';
export const OrderInfo: FC = () => {
const orderData = useSelector(orderSlice.selectors.getOrderSelector);
const id = useParams().number;
const dispatch = useDispatch();
useEffect(() => {
dispatch(getOrderByNumber(Number(id)));
}),
[dispatch, id];
/* Готовим данные для отображения */
const orderInfo = useMemo(() => {
if (!orderData || !ingredients.length) return null;
const date = new Date(orderData.createdAt);
type TIngredientsWithCount = {
[key: string]: TIngredient & { count: number };
};
const ingredientsInfo = orderData.ingredients.reduce(
(acc: TIngredientsWithCount, item) => {
if (!acc[item]) {
const ingredient = ingredients.find((ing) => ing._id === item);
if (ingredient) {
acc[item] = {
...ingredient,
count: 1
};
}
} else {
acc[item].count++;
}
return acc;
},
{}
);
const total = Object.values(ingredientsInfo).reduce(
(acc, item) => acc + item.price * item.count,
0
);
return {
...orderData,
ingredientsInfo,
date,
total
};
}, [orderData, ingredients]);
if (!orderInfo) {
return <Preloader />;
}
return <OrderInfoUI orderInfo={orderInfo} />;
};
Происходит слишком много запросов на сервер
Надо убрать диспатчи из зависимостей таких эффектов, где обращение к серверу и отправь снова
useEffect(() => {
dispatch(getOrderByNumber(Number(id)));
}), Как это сделать ?
функция getOrderByNumber - получение данных с сервера
Ответ нейросети:
Пройдите быструю авторизацию для просмотра:
Для того чтобы убрать dispatch из зависимостей useEffect и вызывать его только один раз, можно передать вторым аргументом useEffect массив зависимостей, который будет пустым. Таким образом, useEffect будет вызываться только один раз при монтировании компонента.
Обратите внимание: ответы, предоставляемые искусственным интеллектом, могут не всегда быть точными. Не рассчитывайте на них в критически важных областях, таких как медицина, юриспруденция, финансы или в вопросах, связанных с безопасностью. Для важных решений всегда обращайтесь к квалифицированным специалистам. Администрация сайта не несет ответственности за контент, сгенерированный автоматически.