Сервис быстрых ответов от искусственного интеллекта
Вопрос пользователя:
Ответ нейросети:
Для того чтобы окно IngredientDetails закрывалось с кнопки, нужно передать функцию onClose в компонент Modal и вызывать ее при нажатии на кнопку закрытия.
В компоненте App нужно скорректировать код следующим образом:
import React, { FC, memo, useEffect, useCallback } from 'react';
import ReactDOM from 'react-dom';
import { TModalProps } from './type';
import { ModalUI } from '@ui';
import { IngredientDetails } from '@components';
const modalRoot = document.getElementById('modals');
export const Modal: FC<TModalProps> = memo(({ title, onClose, children }) => {
useEffect(() => {
const handleEsc = (e: KeyboardEvent) => {
if (e.key === 'Escape') {
onClose();
}
};
document.addEventListener('keydown', handleEsc);
return () => {
document.removeEventListener('keydown', handleEsc);
};
}, [onClose]);
const handleClickClose = useCallback(() => {
onClose();
}, [onClose]);
return ReactDOM.createPortal(
<ModalUI title={title} onClose={handleClickClose}>
{children}
</ModalUI>,
modalRoot as HTMLDivElement
);
});
function App() {
const dispatch: ThunkDispatch<RootState, unknown, AnyAction> = useDispatch();
useEffect(() => {
dispatch(fetchIngredients());
}, [dispatch]);
return (
<>
{/* Your other routes */}
<Route
path='/ingredients/:id'
element={
<Modal title='Детали ингредиента' onClose={() => {
// Close modal logic
}}>
<IngredientDetails />
</Modal>
}
/>
{/* Your other routes */}
</>
);
}
export default App;
Теперь при нажатии на кнопку закрытия в компоненте ModalUI будет вызываться функция onClose, которая передается из компонента App.
Напишите нам, если в вопросе есть ваши персональные данные (yasnoponyatno24@yandex.ru)
Обратите внимание: ответы, предоставляемые искусственным интеллектом, могут не всегда быть точными. Не рассчитывайте на них в критически важных областях, таких как медицина, юриспруденция, финансы или в вопросах, связанных с безопасностью. Для важных решений всегда обращайтесь к квалифицированным специалистам. Администрация сайта не несет ответственности за контент, сгенерированный автоматически.