Расширение SharePoint Online @microsoft/sp-dialog с добавлением дополнительной модалки

Вопрос или проблема

Вдруг у меня появился пустой модальный диалог на основном модальном окне. Не понимаю, откуда это берется. Я использую версии 1.17.4 для microsoft/sp-core-library и microsoft/sp-dialog.

microsoft/sp-dialog добавляет дополнительный модальный диалог

Мой код страницы диалога выглядит так. Компонент App очень простой, просто отображает сообщение.

import * as React from "react";
import * as ReactDOM from "react-dom";
import App from "./App";
import { override } from "@microsoft/decorators";

export default class MainDialog extends BaseDialog {
  public render(): void {

    const app = <App close={this.close} />;
    const interval = setInterval(() => {
      if (this.domElement) {
        ReactDOM.render(app, this.domElement);
        clearInterval(interval);
      }
    });
  }

  public getConfig(): IDialogConfiguration {
    return {
      isBlocking: true,
    };
  }

  @override
  protected onBeforeOpen(): Promise<void> {
    return new Promise((resolve, reject) => {       
      window.setTimeout(() => resolve(), 1);
    });
  }

  protected onAfterClose(): void {
    super.onAfterClose();
    ReactDOM.unmountComponentAtNode(this.domElement);        
  }
} ```

Ответ или решение

Ваша проблема с "пустым модальным окном" в SharePoint Online, вероятно, связана с неправильной инициализацией компонента или неправильным монтированием React компонента. Давайте подробно разберем ваш код и предложим исправления.

Возможные причины проблемы:

  1. Неверный рендеринг компонента: Убедитесь, что this.domElement правильно инициализирован и доступен для рендеринга.
  2. Ошибки в компоненте App: Если компонент App выводит пустой результат или имеет собственные ошибки, это также может привести к отображению пустого модального окна.
  3. Проблемы с CSS: Иногда стили могут скрывать содержимое модального окна. Проверьте класс стилей, который применяются к вашему диалогу.

Исправленный код:

Ниже приведен обновленный код с некоторыми исправлениями:

import * as React from "react";
import * as ReactDOM from "react-dom";
import App from "./App";
import { BaseDialog, IDialogConfiguration } from "@microsoft/sp-dialog";
import { override } from "@microsoft/decorators";

export default class MainDialog extends BaseDialog {
  public render(): void {
    const app = <App close={this.close} />;

    // Используем Promise для более надежного рендеринга
    this.ensureDialogElement();

    ReactDOM.render(app, this.domElement);
  }

  private ensureDialogElement(): void {
    if (!this.domElement) {
      throw new Error("DOM element is not available for rendering.");
    }
  }

  public getConfig(): IDialogConfiguration {
    return {
      isBlocking: true,
    };
  }

  @override
  protected onBeforeOpen(): Promise<void> {
    return new Promise((resolve) => {
      setTimeout(() => resolve(), 1);
    });
  }

  protected onAfterClose(): void {
    super.onAfterClose();
    if (this.domElement) {
      ReactDOM.unmountComponentAtNode(this.domElement);
    }
  }
}

Рекомендации при отладке:

  1. Проверка ошибок в компоненте App: Убедитесь, что ваш компонент App корректно отрисовывается и не содержит ошибок. Добавьте логи или временный текстовый вывод, чтобы проверить, отображается ли он как ожидалось.

  2. Консоль браузера: Откройте инструменты разработчика браузера и проверьте наличие ошибок в консоли. Это может дать вам подсказки о проблемах с компонентами или рендерингом.

  3. Шаблон стилей: Если проблемы сохраняются, попробуйте временно удалить все CSS-стили, связанные с модальным окном, чтобы увидеть, не скрываются ли элементы из-за проблем со стилями.

  4. Тестирование в разных браузерах: Иногда проблемы могут быть вызваны несовместимостью браузера. Попробуйте протестировать ваш код в разных браузерах.

Заключение:

Следуя этим рекомендациям, вы сможете устранить проблему с пустым модальным окном в SharePoint Online. Убедитесь, что все части вашего компонента работают синхронно и без ошибок, что должно помочь вам достичь желаемого результата.

Оцените материал
Добавить комментарий

Капча загружается...