如何使用 h() 函数添加 innerhtml(或 innertext)?
how can I add innerhtml(or innertext) using h() function?
出于某些原因,我需要使用虚拟 DOM,这是我的代码,
// test.js
import { h, ref } from 'vue'
const ButtonCounter = {
name: 'button-counter',
props: {
tag: {
type: String,
default: 'div'
}
},
setup (props) {
const sliderClass = ref('slider-slide')
return () => {
return h(props.tag, {
class: sliderClass.value
})
}
}
}
export { ButtonCounter }
<template>
<div>
<div id="components-demo">
<!-- putting <img>tag in virtual DOM -->
<button-counter tag="span"><img src="../assets/images/red.jpg" alt=""></button-counter>
</div>
</div>
</template>
<script>
import { ButtonCounter } from '../assets/js/test'
import { Swiper, SwiperSlide } from 'swiper/vue'
import 'swiper/css'
export default {
name: 'TestView',
components: {
ButtonCounter,
Swiper,
SwiperSlide
},
setup () {
}
}
</script>
我希望在 <span class="slider-slide"></span>
中添加 <img src="../assets/images/red.jpg" alt="">
,但结果是,
https://i.stack.imgur.com/DR4Te.png
没有添加。
我怎样才能让它发挥作用?
感谢您的帮助。
h
渲染函数不会自动渲染作用域(即组件的 inner/wrapped 部分),而无需您明确告知。
这段代码应该可以做到:
setup (props, { slots }) {
const sliderClass = ref('slider-slide');
return () => {
return h(props.tag, {
class: sliderClass.value
}, slots.default());
};
}
注意添加对 slots.default()
的调用,添加为渲染函数的 children
参数。
出于某些原因,我需要使用虚拟 DOM,这是我的代码,
// test.js
import { h, ref } from 'vue'
const ButtonCounter = {
name: 'button-counter',
props: {
tag: {
type: String,
default: 'div'
}
},
setup (props) {
const sliderClass = ref('slider-slide')
return () => {
return h(props.tag, {
class: sliderClass.value
})
}
}
}
export { ButtonCounter }
<template>
<div>
<div id="components-demo">
<!-- putting <img>tag in virtual DOM -->
<button-counter tag="span"><img src="../assets/images/red.jpg" alt=""></button-counter>
</div>
</div>
</template>
<script>
import { ButtonCounter } from '../assets/js/test'
import { Swiper, SwiperSlide } from 'swiper/vue'
import 'swiper/css'
export default {
name: 'TestView',
components: {
ButtonCounter,
Swiper,
SwiperSlide
},
setup () {
}
}
</script>
我希望在 <span class="slider-slide"></span>
中添加 <img src="../assets/images/red.jpg" alt="">
,但结果是,
https://i.stack.imgur.com/DR4Te.png
没有添加。
我怎样才能让它发挥作用? 感谢您的帮助。
h
渲染函数不会自动渲染作用域(即组件的 inner/wrapped 部分),而无需您明确告知。
这段代码应该可以做到:
setup (props, { slots }) {
const sliderClass = ref('slider-slide');
return () => {
return h(props.tag, {
class: sliderClass.value
}, slots.default());
};
}
注意添加对 slots.default()
的调用,添加为渲染函数的 children
参数。