优化 - 渲染调优 - 图1

知识点


模拟理解React.lazy() + Suspense

  1. // 模拟 Lazy 组件
  2. const Lazy = () => {
  3. // 模拟 ()=> import('index.js') 效果
  4. throw new Promise((resolve) => {
  5. setTimeout(() => {
  6. // 注意:有个 default 属性
  7. resolve({default: '子组件'})
  8. }, 3000);
  9. })
  10. }
  11. // 模拟 Suspense 组件
  12. function Suspense() {
  13. try {
  14. Lazy()
  15. } catch (promise) {
  16. console.log('渲染 fallback')
  17. promise
  18. .then(result => {
  19. /*
  20. 只要 promise 状态发生变化,就能触发 then 方法(此时:pending --> fulfilled);
  21. result 就是导入的模块,result.default 就能获取到 index.js 的默认导出值;
  22. 这时控制渲染 Suspense 子组件
  23. */
  24. console.log('渲染完成,加载子组件', result)
  25. })
  26. .catch(error => {
  27. /*
  28. pending --> rejected
  29. */
  30. console.log('处理异常。。。')
  31. })
  32. }
  33. }
  34. /* 相当于 <Suspense> 组件 */
  35. Suspense()