如何使用 React 延迟加载导入 Json 文件?

IT技术 json reactjs lazy-loading lottie
2021-04-27 11:16:10

我想在我的 React 应用程序中实现延迟加载,但大多数文件都是 JSON。当视口宽度小于例如 768px 时,它们中的一些正在加载,并且我不想在不需要它们时将它们加载到桌面应用程序中。有没有办法用 React.lazy() 加载 JSON 文件?

我的 JSON 文件是使用 Adob​​e After Effect 扩展生成的,名为:“Bodymovin”,后来我像这样导入这个文件:

import * as background from './background.json';
import * as backgroundLarge from './background-large.json';
import * as backgroundMedium from './background-medium.json';
import * as backgroundMobile from './background-mobile.json';
import * as backgroundSmallMobile from './background-smallMobile.json';
import * as tree from './tree.json';
import * as treeLarge from './tree-large.json';
import * as treeMedium from './tree-medium.json';
import * as treeMobile from './tree-mobile.json';
import * as treeSmallMobile from './tree-smallMobile.json';

我试图像使用默认导出的任何其他组件一样正常加载它,但它不起作用。

const treeMedium = lazy(() => import('./tree-medium.json'));

当我正常导入 JSON 时,我稍后会像这样使用它:

backgroundOptions: {
      loop: true,
      autoplay: true,
      animationData: background.default,
    },

并将这个对象Lottiereact-lottie

我可以将其转换为延迟加载还是我想错了?

1个回答

它不是一个 React 组件,所以你不应该用lazy调用来包装它
基本上你只需要加载它并处理一个Promise。
就像是:

componentDidMount() {
 import('./tree-medium.json').then(background => {
  this.setState({ background })
 })
}

然后在你的某处使用它 render