Vue watch监听prop变化 失效?

/* 父组件内部 */
<div>
  <!-- 子组件 -->
  <son :id="id"></son>
</div>

data() {
    return {
      id: -1
    }
  }

created() {
  this.id = 12
}

watch: {
  id() {
    console('变变变')
  }
}
/* 子组件内部 */

props: {
  id: Number
}

watch: {
  id() {
    console('变变变')
  }
}

父组件自己能检测到,子组件中没有检测到,,我以为流程是这样的 子组件prop id 在初始值-1不执行监测的回调是正常的,因为我没有使用immediate属性, 但它现在已经不在是初始值-1了 而是12了,应该监测到啊? 这是怎么回事,父组件它自己都可以正常监测到

阅读 4.8k
4 个回答

父级先create,子级再create,watch在create中完成,所以父级create完成时,子级watch还未初始化

子组件使用深度监听,美国的网友也用vue吗

生周期钩子初始化执行顺序如下:
父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted

通常是在异步的情况下去修改这个值,而你的例子中只是简单的进行赋值操作,这样还不如直接作为初始值。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏