uni-app vue3 setup写法时如果创建一个大驼峰或者是小驼峰的和组件名相同的变量时easycom失效

发布于 1周前 作者 nodeper 来自 Uni-App

uni-app vue3 setup写法时如果创建一个大驼峰或者是小驼峰的和组件名相同的变量时easycom失效

示例代码:

<template>  
    <view class="page">  
        hello ,这是一个组件 ↓  
        <c-address-item></c-address-item>  
    </view>  
</template>  

<script setup>  

</script>

如果创建一个大驼峰或者是小驼峰的和组件名相同的变量,页面就会不加载组件,并且没有任何报错提醒!

<template>  
    <view class="page">  
        hello ,这是一个组件 ↓  
        <c-address-item></c-address-item>  
    </view>  
</template>  

<script setup>  
let CAddressItem  
//或者是  
let cAddressItem  
</script>

操作步骤:

  • 打开页面

预期结果:

  • 组件正常加载

实际结果:

  • 组件未被加载,没有任何报错
  • 微信小程序中的Wxml查看显示,编译出的结果标签缺失了"is"属性
  • is="components/c-address-item/c-address-item"

bug描述:

如果创建一个大驼峰或者是小驼峰的和组件名相同的变量,页面就会不加载组件,并且没有任何报错提醒!

信息类别 信息内容
产品分类 uniapp/小程序/微信
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win11
HBuilderX类型 正式
HBuilderX版本号 3.99
第三方开发者工具版本号 1.06.2402040
基础库版本号 3.3.5
项目创建方式 HBuilderX

1 回复

在使用 uni-appVue 3setup 语法时,如果你创建了一个与组件名相同的大驼峰或小驼峰命名的变量,可能会导致 easycom 自动组件注册失效。这是因为 easycom 依赖于组件名的全局注册,而如果你在局部作用域中定义了一个同名的变量,可能会覆盖或干扰 easycom 的组件解析。

问题原因

easycomuni-app 提供的一种自动组件注册机制,它会根据组件的命名规则自动查找并注册组件。当你使用 setup 语法时,如果你在局部作用域中定义了一个与组件名相同的变量,Vue 可能会优先使用局部变量,从而导致 easycom 失效。

解决方案

为了避免这个问题,你可以采取以下几种解决方案:

  1. 避免使用与组件名相同的变量名: 确保你在 setup 中定义的变量名不会与组件名冲突。例如,如果你有一个组件名为 MyComponent,不要在你的 setup 中定义一个名为 MyComponent 的变量。

    export default {
      setup() {
        const myComponentData = ref(null); // 避免使用 MyComponent
        return {
          myComponentData,
        };
      },
    };
  2. 使用不同的命名风格: 如果你确实需要使用与组件名相似的变量名,可以考虑使用不同的命名风格,例如在变量名前面加上 local 或其他前缀。

    export default {
      setup() {
        const localMyComponent = ref(null); // 使用不同的命名风格
        return {
          localMyComponent,
        };
      },
    };
  3. 显式导入组件: 如果你希望确保组件能够正确注册,可以显式地导入组件,而不是依赖 easycom

    import MyComponent from '@/components/MyComponent.vue';
    
    export default {
      components: {
        MyComponent,
      },
      setup() {
        const myComponentData = ref(null);
        return {
          myComponentData,
        };
      },
    };
  4. 使用 unplugin-vue-components 插件: 如果你使用的是 ViteWebpack,可以考虑使用 unplugin-vue-components 插件来自动导入组件,这样可以避免手动导入和 easycom 的冲突。

    // vite.config.js
    import Components from 'unplugin-vue-components/vite';
    import { VantResolver } from 'unplugin-vue-components/resolvers';
    
    export default {
      plugins: [
        Components({
          resolvers: [VantResolver()],
        }),
      ],
    };
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!