`v-html` render some random issue
Version
3.2.31
Reproduction link
Steps to reproduce
<template>
<pre data-type="js"><code v-html="'<span>show-it </span>'"></code></pre>
<div class>
<span class>1</span><span class>2</span>
</div>
</template>
this is the base code. now we can't see predefined content of show-it
but, if i do some thing, with lite coding, it just be shown. for example:
- add some non-native attrs into the
pre
tag, eg: add attr name ofa
or modifydata-type
to the_data-type
; - or remove last
div
tag ; - or remove some class attrs into the last
div
tag orspan
tag;
below code, only add a .
(english dot)after predefined content show-it
, and save a single vue file, it will shown
<template>
<pre data-type="js"><code v-html="'<span>show-it. </span>'"></code></pre>
<div class>
<span class></span><span class></span>
</div>
</template>
look like this https://stackblitz.com/edit/vue3-v-html-render-error
our team test some times, bug can not find where is Error Spelling. so commit this issue, hope the official reply, thanks
What is expected?
we hopy this code will shown show-it
<template>
<pre data-type="js"><code v-html="'<span>show-it </span>'"></code></pre>
</template>
What is actually happening?
text show-it
sometimes will not shown
https://codesandbox.io/s/eager-paper-prv33s https://stackblitz.com/edit/vue3-v-html-render-error
a workaround that does not alter the output html
wrap string expression in ()
<template>
<pre data-type="js"><code v-html="('<span>show-it </span>')"></code></pre>
</template>
This will force it not to get statically hoisted.
data-*
attribute, only "expedited" the static hoisting but does not seem to be part of this issue.
SFC playground static hoisting loses v-html
output:
const _hoisted_1 = /*#__PURE__*/_createStaticVNode("<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><pre><code></code>\n</pre>", 17)
const _hoisted_18 = [
_hoisted_1
]
import { ref } from 'vue'
const __sfc__ = {
setup(__props) {
return (_ctx, _cache) => {
return (_openBlock(), _createElementBlock("div", null, _hoisted_18))
}
}
}