🔖

Next.js, bootstrap modal(モーダル) 起動の手順

2022/10/03に公開

概要:

Next.js + typescriptで、bootstrap のimport 難航した為、対策メモです

  • bootstrap公式の方法で、JS modal 起動が難しいようでした

構成

  • next.js 12

関連


実装

  • modal
    id = open_buttonは、CSSで隠しておきます
ModalPost.tsx
import Link from 'next/link';
//Types
interface IProps {
  id: number,
}

/**
* IndexRow
* @param
*
* @return
*/
const ModalPost: React.FC<IProps> = function (props: any) {
  return (
    <div className="row justify-content-center"> 
      {/* button */}
      <button type="button" id="open_button" className="btn btn-primary"
       data-bs-toggle="modal" data-bs-target="#exampleModal">
        Launch demo modal
      </button>
      {/* Modal */}
      <div className="modal fade" id="exampleModal" aria-labelledby="exampleModalLabel"
	      aria-hidden="true">
        <div className="modal-dialog">
          <div className="modal-content">
            <div className="modal-header">
              <h5 className="modal-title" id="exampleModalLabel">Modal title</h5>
              <button type="button" className="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div className="modal-body">
              ...
            </div>
            <div className="modal-footer">
              <button type="button" className="btn btn-secondary" data-bs-dismiss="modal">Close
              </button>
            </div>
          </div>
        </div>
      </div>
      <style>{`
        #open_button { display: none ;}
      `}</style>              
    </div>
  )
}
;
export default ModalPost;

  • 呼出し

  • modal コンポーネント の、Id = open_button を指定

  • click イベントを発火

  • modal 開きます

show.tsx
  const parentShow = async function (id: number) 
  {
    try {
console.log("parentShow", id);
      const btn = document.getElementById("open_button");
      btn?.click();
    } catch (e) {
      console.log(e);
      throw new Error('error, parentFunc');
    }
  }

Discussion