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

添加Vue组件时报parentNode TypeError错误页面仅部分渲染如何解决

问题根源

你的报错完全来自ReviewItem组件的语法错误,直接导致Vue虚拟DOM渲染时无法正确识别DOM节点的父子关系,触发parentNode为空的异常。

具体修复步骤

1. 给ReviewItem组件添加唯一根节点

Vue要求单文件组件的template必须有且仅有一个根元素,你当前的ReviewItem模板直接并列了三个<p>标签,没有根容器,是导致DOM渲染异常的核心原因。同时需要修复错误的属性绑定写法:

<template>
  <!-- 新增div作为唯一根节点 -->
  <div class="review-item">
    <p>Review</p>
    <!-- 修复错误的v-bind写法,用插值语法显示评论内容 -->
    <p class="review">{{ comment }}</p>
    <p>Rating: <span v-for="star in rating" v-bind:key="star">⭐</span></p>
  </div>
</template>

2. 删除ReviewItem内部和props重名的data变量

你已经在props中声明了rating和comment,又在data里定义了同名变量,会触发变量覆盖冲突,违反Vue单项数据流规范,直接删掉组件内部的重名data字段即可,如果需要默认值可以在props里声明:

<script>
export default {
  name: 'ReviewItem',
  props: {
    rating: {
      type: Array,
      default: () => [1,1,1,1,1]
    },
    comment: {
      type: String,
      default: 'test comment'
    }
  }
}
</script>

3. 修复父组件的非规范自闭合textarea标签

HTML规范中textarea是必须有闭合标签的元素,不要写自闭合语法,避免渲染异常:

<div v-if="!isReviewed()">
  <!-- 改成完整闭合标签 -->
  <textarea rows="8" cols="35" name="comment" placeholder="Add review"></textarea>
  <br>
  <input type="text" name="rating" placeholder="Rating (1-5)" size="5" maxlength="1"/>
  <br><br>
  <button type="button">Add Review</button>
  <br><br>
</div>

4. 可选优化:isReviewed方法添加参数区分不同预订

你当前的isReviewed()固定返回true,所有预订都会显示评论组件,后续业务迭代时建议传入bookingId来判断单条预订是否已评论,避免所有预订共用同一个评论状态。

修改完成后重启项目即可正常渲染Bookings模块。

内容的提问来源于stack exchange,提问作者noumenal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:45:01