React Material Modal TransitionProps не срабатывает при входе

Итак, я работаю над обновлением Material UI до v5, и сначала я получил сообщение об ошибке, что onEntering устарел, и я должен использовать переходные реквизиты.

У меня есть метод, назовем его doSomething, который я хочу запускать при открытии модального окна.

Если я сделаю это так, у меня нет ошибок, но doSomething не вызывается при открытии модального окна:

<Modal
   TransitionProps = {{ onEntering: (): void => doSomething() }}
>
...
</Modal>

С другой стороны, если я сделаю следующее, будет вызван бесконечный цикл doSomething, а также ошибка о void is not assignable to type ((node: HTMLElement, isAppearing: boolean) => void) | undefined

<Modal
   TransitionProps= {{ onEntering: doSomething() }}
>
...
</Modal>

Я проверил документацию по обновлению материала, и в ней нет хороших примеров того, что делать при назначении функции/метода, который будет вызываться во время переходов.

Это просто показывает, что вместо onEntering = {doSomething} использовать TransitionProps = {{ onEnter, onEntering, etc. }}, что не помогает в отношении того, как установить onEntering для вызова функции.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проблема может быть связана с тем, что TrasitionProps существует в диалоговом окне , а не в модальном (Dialog наследуется от Modal, который, в свою очередь, наследуется от безголового нестилизованного модального окна @mui/base).

Модальный

Если вы пытаетесь обработать эти события на Modal, вы должны передать обработчики своему собственному компоненту перехода (в моем примере я использовал Fade):

import Modal from "@mui/material/Modal";
import Fade from "@mui/material/Fade";

...

<Modal open = {open}>
  <Fade
    onEntered = {handleEntered}
    onExiting = {handleExiting}
    onExited = {handleExited}
    in = {open}
  >
    ...
  </Fade>
</Modal>

Работающий CodeSandbox: https://codesandbox.io/s/spring-field-sw9fxq?file=/demo.js

Диалог

Если вы пытаетесь обработать эти события в Dialog, вы должны передать обработчики через TransitionProps в Dialog:

import Dialog from "@mui/material/Dialog";

...

<Dialog
  open = {open}
  TransitionProps = {{
    onEntered: handleEntered,
    onExiting: handleExiting,
    onExited: handleExited
  }}
>
  ...
</Dialog>

Работающий CodeSandbox: https://codesandbox.io/s/jolly-sanne-0t5mks?file=/demo.js

Итак, да, этот модальный элемент не имеет ничего похожего на компонент Fade. Я вставлю это и посмотрю, что произойдет.

Bardicer 14.12.2022 16:17

Таким образом, переключение его с модального на компонент диалогового окна, а затем использование атрибута TransitionProps для диалогового окна, похоже, решило проблему без необходимости дополнительной тяжелой работы. Попытка поместить компонент перехода внутрь модального компонента вызывала больше проблем, но второй вариант работал хорошо и чисто. Спасибо!

Bardicer 19.12.2022 17:46

Другие вопросы по теме