:date: 2023-12-28 23:00 :tags: Vue, VirtualDOM, Markdown =================================================================================== Vue Componentの再利用による意図しない描画を避ける、MD仮想DOM描画の特殊ケース =================================================================================== .. Vue Componentの再利用が仮想DOMレンダリング対応のMarkdownエディタで想定外の動作 .. Vue Markdownエディタの仮想DOMレンダリングにおける想定外のComponent再利用 Vueは効率的な画面更新のために、差分による描画更新を行います。 差分更新時にはComponentが自動的に再利用されますが、 ``v-for`` 利用時に意図通りの描画を行うためには ``key`` 属性を指定してComponentの再利用方法を制御します。 しかし、 :doc:`Markdownエディタの仮想DOMによるプレビュー描画 ` では、Component再利用を意図通りに制御しづらいケースがあります。 前提 ======= * Node 18 * Vue 3.3.4 * TypeScript 5.2.2 * markdown-it 13.0.2 コードはGitHubにあります。 https://github.com/shimizukawa/vue-md-editor-vdom/tree/2023.12.28 Vue Component再利用の状況を確認する ========================================== 以下のデモでは、Markdownの記法を拡張して ``#数字`` でIssue番号を指定できるようにし、専用のComponent `MarkdownRendererIssue.vue`_ で描画しています。 .. _MarkdownRendererIssue.vue: https://github.com/shimizukawa/vue-md-editor-vdom/blob/2023.12.28/src/components/MarkdownRendererIssue.vue .. figure:: ./20231228-demo1.png :class: controls Issue番号の直前にアイコンを表示していますが、アイコンの色はComponentのsetup時にランダムに決定しています。Componentが再利用された場合に同じ色が使われるため、色でComponentの再利用状況が分かるようになっています ``