Vuetify悬停菜单触发Vue警告:渲染时访问未定义props属性
解决Vue警告:Property "props" was accessed during render but is not defined on instance
问题根源:你给所有菜单项都套了<v-menu>组件,包括没有子菜单的项。当菜单项没有子菜单时,<v-menu>内部的插槽逻辑会出现未定义的props引用,触发Vue警告。
修复方案
将菜单渲染逻辑拆分为两种情况:仅对有子菜单的项使用<v-menu>组件,无子女单直接渲染按钮:
<template v-for="(item, index) in menus" :key="index"> <!-- 包含子菜单的菜单项 --> <v-menu v-if="item.children.length > 0" :open-on-hover="true" close-on-content-click="false" :value="index" > <template v-slot:activator="{ props }"> <v-btn color="rgb(0 0 0 / 65%)" v-bind="props" :prepend-icon="'fa:fas ' + item.iconClass" @click="navigate(item.url)" class="text-capitalize" > {{ item.label }} </v-btn> </template> <v-list> <template v-for="submenu in item.children" :key="'s' + submenu.id"> <v-divider v-if="submenu.hasHrBefore" :key="'hrb' + submenu.id"></v-divider> <v-list-item :prepend-icon="'fa:fas ' + submenu.iconClass" @click="navigate(submenu.url)" :title="submenu.label" ></v-list-item> <v-divider v-if="submenu.hasHrAfter" :key="'hra' + submenu.id"></v-divider> </template> </v-list> </v-menu> <!-- 无子女单直接渲染按钮 --> <v-btn v-else color="rgb(0 0 0 / 65%)" :prepend-icon="'fa:fas ' + item.iconClass" @click="navigate(item.url)" class="text-capitalize" > {{ item.label }} </v-btn> </template>
修复说明
这种拆分方式避免了为无子女单加载多余的<v-menu>组件,从根源上消除了props未定义的警告,同时菜单的悬停展开、跳转等原有功能完全不受影响。
内容的提问来源于stack exchange,提问作者paulodrjr
相关产品推荐
相关产品推荐

