sweetalert × React × TypeScript

2018-10-12

sweetalert v2.1.0では、text の型が string のため、html を記述することができません。

とはいえ、派生版である sweetalert2 は、開発は活発なものの、作りがイマイチで、使うのを諦めてしまいました。

で、どうやったら text に html が設定できるのか。

加えて、React のコンポーネントが設定できたら最高だよなぁと思いつつ、色々試してみたところ、以下でいけました。

import swal from "sweetalert";
import { renderToStaticMarkup } from "react-dom/server";

swal({
  content: {
    attributes: {
      innerHTML: renderToStaticMarkup(
        <ReactComponent>
          <p>テキスト</p>
        </ReactComponent>,
      ),
    },
    element: "div",
  },
  // htmlは型定義に含まれていないため、使用できない
  // html: true
  icon: "info",
  title: "タイトル",
});

text に div が重複するケースも多いんですが、React のコンポーネントが使えないよりは断然マシかなと…。