遇到的问题
vue3 自定义组件(component )失效
如果使用<script setup>
写法的vue3文件中,使用component有可能失效,组件被直接渲染成纯html名字的标签
原因:
个人认为,组件在
<script setup>
没有被正确的注册官方解析,动态组件不能使用简单的变量,要以组件名显式使用,说法比较模糊不好理解,官方链接
解决:
- 再添加一个
script
标签,显式得注册要动态渲染的组件,这样可以无视官方的奇怪规则,同时显式的生命有助于后期更好的维护
<component :is="tabMap[localStore.currtMode]"></component>
<script lang="ts">
import TabCrop from './tabCrop.vue';
import TabPictureInfo from './tabPictureInfo.vue';
const tabMap: {
[key: string]: string; // tab名称
} = {
'crop': 'TabCrop',
'picture-info': 'TabPictureInfo',
};
export default { components: { TabCrop, TabPictureInfo } };
</script>
参阅文献:
vue3 watch 报错 Invalid watch source
ue warn]: Invalid watch source: 297x210 A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.
watch的第一个参数仅支持:ref类型,函数,响应式对象,不支持任何基础类型,基础类型必须使用函数进行包裹
// 错误写法:
// 代码写法,这里的props.visible是一个boolean类型
watch(props.visible, (newVal) => {
if (newVal) {
xxxx....
}
})
// 正确写法
watch(() => props.visible, (newVal) => {
if (newVal) {
xxxx....
}
})