持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
React.lazy
React.lazy函数能像渲染常规组件一样处理动态引入的组件 例子:
const A = React.lazy(()=> import('./xxxx'))
这样就能在首次渲染组件时,自动导入包含xxx组件的包
React.lazy接受一个函数,这个函数需要动态调用import(),它必须返回一个Promise,该Promise需要resolve一个default export的React组件
然后应在Suspense组件中渲染lazy组件,如此就能在等待加载lazy组件时做优雅降级
import React, { Suspense } from 'react';
const A = React.lazy(() => import('./xxx'));
function MyComponent() { return (
); }
fallback 属性接受任何在组件加载过程中你想展示的 React 元素。可以将 Suspense 组件置于懒加载组件之上的任何位置。甚至可以用一个 Suspense 组件包裹多个懒加载组件。
import React, { Suspense } from 'react';
const A = React.lazy(() => import('./xxx'));
const B = React.lazy(() => import('./xxx'));
function MyComponent() {
return (
<div>
<Suspense fallback={<div>Loading...</div>}>
<A />
<B />
</Suspense>
</div>
);
}
异常捕获边界(Error boundaries)
如果模块加载失败(如网路问题),它会触发一个错误。可以通过异常捕获边界(Error boundaries)技术处理这些情况
import React, { Suspense } from 'react';
import Error from './xxxx';
const A = React.lazy(() => import('./xxxx'));
const B = React.lazy(() => import('./B'));
const MyComponent = () => (
<div>
<Error>
<Suspense fallback={<div>Loading...</div>}>
<section>
<A />
<B />
</section>
</Suspense>
</Error>
</div>
);
Context
Context提供了一个无需为每层组件手动添加props,就能在组件树间进行数据传递的方法。
在一个典型的 React 应用中,数据是通过 props 属性自上而下(由父及子)进行传递的,但这种做法对于某些类型的属性而言是极其繁琐的(例如:地区偏好,UI 主题),这些属性是应用程序中许多组件都需要的。Context 提供了一种在组件之间共享此类值的方式,而不必显式地通过组件树的逐层传递 props。