in vue 3 script setup-6ren"> in vue 3 script setup-我正在使用实验 script setup创造学习环境。我有一个打开单个组件的自制导航栏。 我在使用 时遇到问题方法。此方法在 component basics -> dynamic-componen-6ren">
gpt4 book ai didi

javascript - 如何使用<组件:is =""> in vue 3 script setup

转载 作者:行者123 更新时间:2023-12-04 11:48:29 25 4
gpt4 key购买 nike

我正在使用实验 script setup创造学习环境。我有一个打开单个组件的自制导航栏。
我在使用 <component :is="" /> 时遇到问题方法。此方法在 component basics -> dynamic-components 下的文档中进行了描述
在 Vue 3 Composition API 中,它按预期工作:

<template>
<NavigationBar
@switchTab="changeTab"
:activeTab="tab"
/>
<component :is="tab" />
</template>

<script>
import { ref } from 'vue'
import NavigationBar from './components/NavigationBar.vue'
import TemplateSyntax from './components/TemplateSyntax.vue'
import DataPropsAndMethods from './components/DataPropsAndMethods.vue'

export default {
components: {
NavigationBar,
TemplateSyntax,
DataPropsAndMethods
},
setup () {
const tab = ref('DataPropsAndMethods')
function changeTab (newTab) {
tab.value = newTab
}

return {
changeTab,
tab
}
}
}
</script>

我使用 script setup 的方法失败:
<template>
<NavigationBar
@switchTab="changeTab"
:activeTab="tab"
/>
<component :is="tab" />
</template>

<script setup>
import NavigationBar from './components/NavigationBar.vue'
import TemplateSyntax from './components/TemplateSyntax.vue'
import DataPropsAndMethods from './components/DataPropsAndMethods.vue'
import { ref } from 'vue'

const tab = ref('DataPropsAndMethods')
function changeTab (newTab) {
tab.value = newTab
}
</script>
你知道如何用脚本设置方法解决这个问题吗?

最佳答案

似乎与 <script setup> , tab需要引用组件定义本身而不是组件名称。
要引用不需要 react 性的组件定义,请使用 markRaw() 设置前tab.value :

<script setup>
import DataPropsAndMethods from './components/DataPropsAndMethods.vue'
import { ref, markRaw } from 'vue'

const tab = ref(null)

changeTab(DataPropsAndMethods)

// newTab: component definition (not a string)
function changeTab (newTab) {
tab.value = markRaw(newTab)
}
</script>
demo 1
如果您需要将组件名称传递给 changeTab() ,您可以使用查找:
<script setup>
import DataPropsAndMethods from './components/DataPropsAndMethods.vue'
import { ref, markRaw } from 'vue'

const tab = ref(null)

changeTab('DataPropsAndMethods')

// newTab: component name (string)
function changeTab (newTab) {
const lookup = {
DataPropsAndMethods,
/* ...other component definitions */
}
tab.value = markRaw(lookup[newTab])
}
</script>
demo 2
用 Vue 测试 3.0.9使用 Vue CLI 设置 5.0.0-alpha.8

关于javascript - 如何使用<组件:is =""> in vue 3 script setup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66384268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com