午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

Vue+tsx使用slot沒有被替換的問題

瀏覽:14日期:2023-02-16 11:34:28
目錄前言發(fā)現(xiàn)問題解決后記前言

最近自己準(zhǔn)備寫一個(gè) UI 組件,想對 vue 的 2.x、3.x 可以更深層次的掌握

在架構(gòu)時(shí),準(zhǔn)備全部使用 tsx 書寫組件

但遇到了 tsx 中使用 slot 的問題

發(fā)現(xiàn)問題

先寫了一個(gè)基礎(chǔ)的 card 組件:

card.tsx:

import Component from ’vue-class-component’import VanUIComponent from ’@packs/common/VanUIComponent’import { VNode } from ’vue’import { Prop } from ’vue-property-decorator’import { CardShadowEnum } from ’@packs/config/card’@Componentexport default class Card extends VanUIComponent { @Prop({ type: String, default: undefined }) public headerPadding !: string | undefined @Prop({ type: String, default: ’’ }) public title !: string @Prop({ type: String, default: CardShadowEnum.Hover }) public shadow !: CardShadowEnum public static componentName = ’v-card’ public get wrapperClassName(): string { const list: string[] = [’v-card__wrapper’] list.push(`shadow-${ this.shadow }`) return list.join(’ ’) } public render(): VNode { return ( <div class={ this.wrapperClassName }><div style={ { padding: this.headerPadding } }> { this.$slots.title ? <slot name='title' /> : <div>{ this.title }</div> }</div><div class='v-card__body'> <slot name='default' /></div><div class='v-card__footer'></div> </div> ) }}

在 examples 中使用這個(gè) v-card 的時(shí)候:

<template> <v-card> <template #title>1111</template> </v-card></template><script lang='ts'>import Vue from ’vue’import Component from ’vue-class-component’@Componentexport default class Components extends Vue {}</script><style lang='scss' scoped>.components__wrapper { padding: 20px;}</style>

我發(fā)現(xiàn)渲染后,瀏覽器不替換 slot 標(biāo)簽:

Vue+tsx使用slot沒有被替換的問題

我在百度、Google尋找了一天也沒有解釋,在官方文檔中仔仔細(xì)細(xì)閱讀后,也沒有類似的提示,以及 jsx 編譯器的文檔中也沒有寫明,只是聲明了如何使用命名 slot。

解決

第二天,我一直在糾結(jié)這個(gè),也查了 element-ui 、ant-design-vue 的 UI 組件庫中如何書寫,也沒有找到對應(yīng)的使用 jsx 使用 slot 的。

不甘放棄的我更換了搜索文字,于是終于找到解決方案,并將代碼改為:

... public render(): VNode { return ( <div class={ this.wrapperClassName }><div style={ { padding: this.headerPadding } }> { this.$slots.title ?? <div>{ this.title }</div> }</div><div class='v-card__body'> <slot name='default' /></div><div class='v-card__footer'></div> </div> ) }...

再查看瀏覽器渲染:

Vue+tsx使用slot沒有被替換的問題

問題解決

后記

在使用 jsx / tsx 時(shí),如果 js 語法本身可以解決的,或本身注冊在 this 上的方法,優(yōu)先使用 js 去做,例如 v-if / v-else 可以使用 雙目運(yùn)算符 替代。實(shí)在沒有可用的簡便方法,再使用 vue 的指令做,例如 v-show 。

到此這篇關(guān)于Vue+tsx使用slot沒有被替換的問題的文章就介紹到這了,更多相關(guān)Vue+tsx slot沒有被替換內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 欧美一级二级三级视频 | 自拍偷拍第五页 | 四虎影院在线免费播放 | 国产视频一区二区在线 | 国产乱淫a∨片免费观看 | 国产精久久久 | 成人久久久精品乱码一区二区三区 | 少妇精品偷拍高潮白浆 | 99视频精品在线 | 欧美偷拍视频 | 亚洲网站在线观看 | 亚洲精品免费在线观看 | 午夜探花在线观看 | 蜜挑成熟时在线观看 | 亚洲永久免费精品 | 欧美三级在线 | 999国产视频 | 一区二区三区有限公司 | 一级特黄aa大片 | 亚洲最新在线视频 | 亚洲男人天堂2019 | 午夜影院体验区 | 一二三区在线 | 国产亚洲不卡 | 国产成人愉拍精品久久 | 成人综合网站 | av在线资源观看 | 激情图片在线观看 | 男人操女人免费网站 | 国产亚洲精品久久久久久 | 黄色大片网址 | 一级免费av| 4438x亚洲最大 | 精品少妇一区二区三区免费观看 | 免费国产在线视频 | 天天干视频 | 第九区2中文字幕 | 三级黄色片在线观看 | 艳妇av | 99er这里只有精品 | 色综合五月 |