LoginSignup
3
0

More than 5 years have passed since last update.

SweetAlert2 v8で`Cannot read property 'constructor' of undefined`エラーの対処

Last updated at Posted at 2019-02-10

はじめに

SweetAlert2を使っているプロジェクトで、
開発中にある日突然、こんなエラーが出て動かなくなっちまいました。

Uncaught TypeError: Cannot read property 'constructor' of undefined

原因と対策

バージョン7から8へいつの間にかアップデートされてて、
しかも根本的な部分に非互換があったからでした。
https://github.com/sweetalert2/sweetalert2/releases/tag/v8.0.0

Breaking change # 1 - swal(...) -> Swal.fire(...)

- swal({
+ Swal.fire({
  ...
})

今までswal()でシンプルに動いていたのが、
Swal.fire()というメソッドを呼ばなければいけなくなったんですね。
大文字小文字も変わっとる。

これが一番インパクトでかいですが、他にも合計5つBreaking changeがあるので、要チェックです!

これから気をつけること

無闇にyarn upgrade --latestしない。
実行後はメジャーバージョンアップしてるライブラリがないかちゃんと確認する。
メジャーバージョンアップの内容をちゃんと確認する時間がないときは、
一旦前のメジャーバージョンに戻す。
(油断した頃にハマるんですよねー・・・)

ググっても日本語のハマり事例がなかったので、きっと誰かの役に立つと思いQiitaにしたためます。

追記: SweetAlert2使うのやめました

Swal.fire()が解決してから更にハマりました。
「他にも5つBreaking change」と書きましたが、そこではなく最下部の「Other changes」にひっそりと書かれたこの一文。。。

inputValidator and preConfirm should always resolve and never reject

これが僕としては最悪の仕様変更でした。

preConfirmの中でPromise.reject()したら、v7ではswal()の戻り値としてrejectを返してくれたんですが、v8では絶対にresolveが返ってしまう。なのでswal()try-catchで括るエラー処理が全くできなくなっちゃいました。

もうやってられないので、本家SweetAlert 2.xに移行したのでしたー。ちゃんちゃん。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0