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

Vue.js中父组件数据变化时如何触发内部子组件重新渲染

问题根因及修复方案

你遇到的问题由以下几个错误共同导致,逐一修改即可正常运行:

1. 异步函数getUsernames返回逻辑错误

你没有正确接收异步操作的返回值,两种正确写法二选一:

// 写法1:直接返回Promise
function getUsernames(listID) {
  return sleep(200).then(() => {
    switch (listID) {
      case 0: return ['Pierre', 'Paul', 'Jaques']
      case 1: return ['Riri', 'Fifi', 'Loulou']
      case 2: return ['Alex', 'Sam', 'Clover']
      default: return []
    }
  })
}

// 写法2:async/await 接收结果后返回
async function getUsernames(listID) {
  const res = await sleep(200).then(() => {
    switch (listID) {
      case 0: return ['Pierre', 'Paul', 'Jaques']
      case 1: return ['Riri', 'Fifi', 'Loulou']
      case 2: return ['Alex', 'Sam', 'Clover']
      default: return []
    }
  })
  return res
}

2. watch支持async/await,直接在回调中等待异步结果再赋值

你之前的写法直接把getUsernames返回的Promise赋值给了usernames,自然会把Promise传递给子组件,修改watch逻辑:

watch: {
  async listID(newID) {
    this.usernames = await getUsernames(newID)
  }
}

3. 子组件props类型声明错误

你传递的是数组,props类型应该设为Array,同时设置默认值避免空值报错:

export default {
  props: {
    usernames: {
      type: Array,
      default: () => []
    }
  }
}

4. 父组件usernames初始值优化

把初始值从undefined改成空数组,避免子组件遍历非可迭代对象报错:

data() {
  return {
    listID: 0,
    usernames: [],
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:39:03