vue

题目1

问题:Ajax请求应该放在created里还是mounted里?

API:现成接口jsonplaceholder

执行顺序:

执行同步任务,包括created里和mounted里面的程序,发送请求数据this.getData().then(data => console.log(data)),但是会显示pending, 意味着发了请求不一定能马上拿到数据结果,因为里面then()的异步任务还没执行,等待所有同步任务执行完毕后才能执行异步任务

额外:

Promise.then是微任务,setTimeout是宏任务,执行当前微任务在执行宏任务

同步 > 微任务 > dom渲染 >宏任务

总结:无论放created还是monnted里都可以,回调函数最后才是获取数据

题目2

问题:为什么promisesetTimeout先执行?

  1. $container = $('#app')
  2. //DOM结构更新完毕
  3. //DOM渲染完毕(眼睛可以看到)
  4. //js里拿到的是空
  5. console.log('append前', $container.children().length);
  6. $container
  7. .append('<p>一段内容</p>')
  8. .append('<p>一段内容</p>')
  9. .append('<p>一段内容</p>')
  10. //js里可以拿到渲染之后的结果但没有渲染到页面(dom树)
  11. console.log('append后', $container.children().length);
  12. setTimeout(() => {
  13. alert('setTimeout start');
  14. console.log('setTimeout');
  15. alert('setTimeout end');
  16. });
  17. Promise.resolve().then(() => {
  18. alert('promise start');
  19. console.log('promise');
  20. alert('promise end');
  21. });

顺序:

  1. dom
  2. promise
  3. setTimeout

因为promise在页面渲染之前执行,setTimeout在页面渲染之后才执行

题目3

问题:如何将组件接收的所有props继续往下传递?