LoginSignup
3
1

More than 3 years have passed since last update.

Ant Design Vue の Message で複数行表示させる

Last updated at Posted at 2019-12-01

AntDesign の MessageAPI

スクリーンショット 2019-11-29 12.26.51.png

AntDesignを使っていれば this.$message.info('Hello') などで利用が可能となっています。

スクリーンショット 2019-11-29 12.31.45.png

素晴らしいですね。

複数行表示したい

ヒーリングっど♥プリキュアは2020年春からの放映なのでそれも伝える必要があります。
なので2行表示にしたかったためとりあえず改行コードを入れてみます。

スクリーンショット 2019-11-29 12.37.08.png
おもてたんとちがう…

もちろん <br> を入れてもそのまま表示されてしまいます。
このままでは来年春から始まる新しいプリキュアの素晴らしさがうまく伝わりません。

Stringでは無理

MessageAPIの info 関数は第一引数に string | VNode | (h) => VNode を取ります。
ということで string では無理そうなので他のものを試します。

VNodeって?

こちら で解説してくれていますが仮想ノードにあたります。
要するにこのあたりには直接仮想ノードを渡せますよーということみたいです。

VNodeの作り方

ドキュメント にもあるとおり createElement 関数で作成するのが一般的なようです。
しかし render 内ではないので該当の関数がありませんが h がそれにあたるようです。

createElement を h にエイリアスしていることは、 Vue のエコシステムの中でよく見かける慣習です。そして、それは実は JSX には必須です。Vue の Babel プラグインの バージョン 3.4.0 以降では、ES2015 のシンタックスで宣言された JSX を含むメソッドや getter(関数やアロー関数は対象外)に対しては、自動的に const h = this.$createElement が注入されるため、(h) パラメーターは省略できます。それ以前のバージョンでは、もし h がそのスコープ内で利用可能でない場合、アプリケーションはエラーを throw するでしょう。

ということだそうです。
ん? this.$createElement でもええんか…?

ということで

this.$message.info(h => {
  return h('span', [
    h('span', 'ヒーリングっど♥プリキュア'),
    h('br'),
    h('span', '2020年春からスタート!')
  ])
})

スクリーンショット 2019-11-29 13.01.16.png

ヒャッホウ!!
改行だけでなくハートマークを赤くもできますね。

動作確認したやつ置いときますね。

面倒くさくない?

JSX でもできるみたいです、使えるなら絶対そっちのがいい。
公式もそう言ってます。

次は @karur4n が何かしら書いてくれると思います。
面白い人なので記事もきっと面白いんだろうなあと思います。
ぜひよろしくお願いします。

3
1
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
1