You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:57:31