#javascript #reactjs #typescript #ecmascript-6 #material-ui
#javascript #reactjs #typescript #ecmascript-6 #material-ui
Вопрос:
Сначала я попытался установить модальное значение, и я заметил это поведение, затем я изменил его на диалоговое окно, и оно то же самое.
Я попробовал это:
import Dialog, { DialogProps } from '@material-ui/core/Dialog';
import { useStores } from './stores';
import { useObserver } from 'mobx-react';
export const MyDialog: React.FC<Partial<DialogProps>> = (props) => useObserver(() => {
const { uiStore: { dialogConfig: { open, body } } } = useStores();
if (!body) { return null; }
return (
<Dialog {...{ ...props, open, maxWidth: false }}>
{ body }
</Dialog>
);
});
Я вызываю это в app.tsx: <MyDialog />
И когда я вызываю функцию для отображения диалога, она отображается дважды в DOM, что вызывает у меня любопытство, так это то, что у одного из них есть aria-hidden=true
атрибут.
Но у них внутри точно такой же контент, если я их проверяю.
Я заметил нечто подобное на странице документов https://material-ui.com/components/dialogs /, если вы проверяете DOM, всегда есть одно диалоговое окно, но разница в том, что оно есть visibility: hidden
.
Есть идеи по этому поводу?
Комментарии:
1. Вы можете отобразить что-то еще в этом
MyDialog
компоненте, чтобы подтвердить, является ли эта проблема специфичной для компонента диалогового окна material UI илиMyDialog
она отображается дважды.2. Вы решили это?
Ответ №1:
Сопровождающий ответил на вопрос в этом выпуске. Он сказал, что поведение является нормальным из-за keepMounted
prop, что задокументировано следующим образом:
Всегда сохраняйте дочерние элементы в DOM. Этот реквизит может быть полезен в ситуации SEO или когда вы хотите максимизировать отзывчивость модала.
Когда я смотрю на страницу диалогов веб-сайта material ui, я на самом деле не вижу дублирования, но некоторые диалоги, в которых есть keepMounted
prop , которые уже есть в DOM, но с visibility: hidden
and aria-hidden="true"
, и становятся видимыми при нажатии на open .
Я также пробовал локально, и с помощью или без keepMounted
поддержки у меня нет дублирования. Только тот факт, что диалог уже находится в DOM с самого начала или нет. Так что, вероятно, в вашем примере у вас есть два разных диалоговых окна, одно с реквизитом, а другое без.