shinke1987.net
雑多な備忘録等のはず。
他のカテゴリ・タブ
目次
PR

React:createPortalメソッドの動作確認

2024-05-17 2024-05-17
カテゴリ: React

環境

React:v18.3.1

Tips

上の階層に要素追加とモーダル表示

TestCreatePortal.tsxの内容

import TestCreatePortalChild from './TestCreatePortalChild.tsx';

function TestCreatePortal() {
  return (
    <>
      <div>TestCreatePortal</div>
      <div id="portal" />
      <TestCreatePortalChild />
    </>
  );
}

export default TestCreatePortal;

TestCreatePortalChild.tsxの内容

import { createPortal } from 'react-dom';
import { useState } from 'react';

function TestCreatePortalChild() {
  const [showPortal, setShowPortal] = useState<boolean>(false);

  return (
    <>
      {/* 親コンポーネントに要素追加。 */}
      <div>
        <button
          type="button"
          onClick={() => setShowPortal(true)}
        >
          setShowPortal(true)
        </button>
      </div>

      <div>
        {showPortal
          && createPortal(<p>Created Portal</p>, document.getElementById('portal'))}
      </div>

      {/* 1番上の階層にモーダルの要素を追加。 */}
      <div>
        {
          createPortal(
            <dialog id="dialog">
              Dialog
            </dialog>,
            document.getElementById('root'),
          )
        }
      </div>

      {/* モーダルを表示 */}
      <div>
        <button
          type="button"
          onClick={() => {
            document.getElementById('dialog')?.showModal();
          }}
        >
          showModal
        </button>
      </div>
    </>
  );
}

export default TestCreatePortalChild;

結果

Webブラウザで以下を確認する。

同一カテゴリの記事