一. 父子组件的生命周期

父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted

二. 父传子props数据问题

  1. 异步请求接口数据,在子组件的created和mounted打印不到最新的props
  2. 如父组件传过来的数据是created中请求接口获取的,走到父created遇见请求接口的异步任务,会将其放到一个任务队列,继续执行生命周期(生命周期是同步的)钩子,执行到子组件的created和mounted,还没开始请求接口当然打印不到最新的数据,只能打印到父组件在data中定义的该数据
  3. async/await同步请求接口,如果在created中有await语法则await之后的代码块同样的也会被放入任务队列,先执行子组件的生命周期,子挂载后再执行父mounted中的同步代码,等所有同步任务执行完再执行await的异步及await之后的代码块
  4. 同步数据,父组件在data定义的数据或执行到子created前父组件生命周期中的同步数据,同步数据可以在子组件的created中直接打印处理

三、子组件渲染及如何处理父组件的异步数据

  1. 只是用来展示,如父传递的数据无需特别处理,不论该数据是同步异步,都可用来展示,因为vue是响应式的即使异步数据等数据更新后页面后自动刷新的,不过若为异步数据在子的created里打印不到最新的。
  2. 子对接受的父数据需要处理,

    1. 同步:可直接在created写方法进行处理
    2. 异步:
      方案一:watch 监听到传来的新数据时通过方法进行处理,实时更新。
      方案二:在父组件中给子组件添加v-if,如果接口拿到值了,才加载子组件,子组件才开始渲染,执行生命周期,这样就可以获取到最新的数据了。

张旭超
1.4k 声望222 粉丝

精通 html+div+css jquery, vue, angularjs, angular2, angular4, ionic, ionic2