从Blade向Vue传参时出现Missing required prop错误求助
问题原因与解决方法
你的问题出在组件挂载逻辑和props传递方式上:
当你用createApp(releases).mount("#v-releases")时,#v-releases这个div是Vue组件的根容器,而非组件的调用标签——容器上的属性不会被自动识别为组件的props,因此组件会抛出Missing required prop: "userData"错误,userIsAdmin自然也会显示为false。另外HTML属性不区分大小写,即使能传递,userData也要写成kebab-case格式的user-data,Vue会自动映射到组件内的camelCase命名props。
正确解决步骤:
1. 修改app.js,注册组件并挂载到父容器
不要直接将组件挂载到目标div,而是创建Vue实例、注册组件后挂载到一个父容器:
import "./bootstrap"; import { createApp } from "vue"; import Releases from "./vue/Releases.vue"; // 创建Vue实例 const app = createApp({}); // 注册全局组件 app.component('releases', Releases); // 挂载到父容器 app.mount('#app');
2. 在Blade模板中使用组件标签传递props
把原来的#v-releases div替换为组件标签,用kebab-case格式传递props:
<x-layout.basic> <div id="app"> <!-- 用:user-data绑定数字类型的1,Vue自动映射到组件的userData props --> <releases :user-data="1"></releases> </div> </x-layout.basic>
3. 保留Releases.vue代码不变
你的组件内defineProps和计算属性的写法完全正确,无需修改。
完成以上修改后,props就能正确传递,页面会显示userIsAdmin: true,控制台的错误也会消失。
内容的提问来源于stack exchange,提问作者Puka
相关产品推荐
相关产品推荐

