16
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vue.js の data に Map 型変数を使うとリアクティブにならない

Last updated at Posted at 2018-03-23

Map 型はいいぞ。ES6 からサポートされた本物の連想配列だ。と、みなさんが賞賛していたので積極的に使っていたのですが Vue.js の data に使っていると何やら挙動がおかしいのです。変更しても再描画されない。リアクティブになってくれてないようなのです。

そこで検証してみたのがこちらです。

See the Pen Vue.js Map Class Reactive Test by Akira Ikeda (@akicho8) on CodePen.

  1. 似非連想配列を普通に更新 (Vue.js を始めた人がはまるやつ)
  2. 似非連想配列を Vue.set を使って更新
  3. Map 型を普通に更新
  4. Map 型を Vue.set を使って更新

これの2番目だけが成功します。悲しいことに 3, 4 の Map 型は無反応です。

リアクティブの探求 — Vue.js
https://jp.vuejs.org/v2/guide/reactivity.html

によると、

プレーンな JavaScript オブジェクトを (略) getter/setter に変換します。

とあってどこまでがプレーンなのかよくわからなかったのですが Map 型は含まれていないということです。
ご注意ください。

16
5
2

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
16
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?