-
不更新原因:子组件已渲染出界面,接口数据才调出来
-
父子组件加载的生命周期:
父created => 父onBeforeMount => 子created => 子onBeforeMount => 子onMounted => 父onMounted
- 加载父组件中的数据created,
- 然后再去中执行父组件挂载前的onBeforeMount
- 子组件中的数据加载
- 子组件中的挂载dom
- 再去父组件中挂载dom
也就是说vue是先挂载子组件在挂载父组件
父子组件更新顺序:
父onBeforeUpdate => 子onBeforeUpdate => 父onUpdated => 子onUpdated
父子组件销毁顺序
父onBeforeUnmount => 子onBeforeUnmount => 子onUnmounted => 父onUnmounted
-
解决方案:
- 通过v-if控制子组件挂载的时机;
- 子组件中通过watch监听props的值更新视图;
- 子组件中通过computed监听props的值来更新视图
- definedAsyncComponent异步组件(没法在接口获取后加载)