React 延迟加载 javascript 文件
React lazy loading javascript file
我正在尝试使用 React.lazy 提高我的应用程序的性能。由于以太坊轻钱包是一个巨大的文件,我想把它放在一个单独的包中。当前工作的导入如下:
import lightwallet from 'eth-lightwallet/dist/lightwallet.min.js';
当我尝试使用惰性语法导入时
const lightwallet = React.lazy(() => import('eth-lightwallet/dist/lightwallet.min.js'));
只返回一个 React.lazy 对象 ($$typeof: Symbol(react.lazy)) 而不是 lightwallet 对象。我认为这是因为 lightwallet 没有默认导出。我怎样才能解决这个问题?谢谢!
确保您的 React 版本在 React v16.6.0 中是最新的。以及 React 背后的核心思想。 lazy is React.lazy 采用必须调用动态 import() 的函数。这必须 return 一个 Promise 解析为一个包含 React 组件[=15] 的 default export 的模块=].但是这种情况 min.js 不会给出任何承诺。很可能那没有用。
我建议按照此处的示例进行操作:
https://reacttraining.com/react-router/web/guides/code-splitting
react-loadable
是一个 npm 包,它使代码拆分(a.k.a 延迟加载)变得非常容易,并且还为您提供了在延迟加载完成之前呈现加载组件的能力。
唯一的问题是,如果您使用 Babel
转译代码包,则必须添加对动态导入语法的支持,webpack
默认情况下已经支持,但是 Babel
没有。
Babel 插件:
@babel/plugin-syntax-dynamic-import
将通过添加对语法的支持来实现这一点。
我推荐 react-loadable
而不是 React.lazy
,因为它使得在延迟加载发生时显示加载组件非常容易,并为您提供挂钩以显示错误组件并在这种情况下重试导入它失败了。
在此处阅读有关 react-loadable
的更多信息:
https://github.com/jamiebuilds/react-loadable
您的代码将如下所示:
import Loadable from 'react-loadable';
import Loading from './YOUR-LOADING-COMPONENT';
const LoadableWallet = Loadable({
loader: () => import('eth-lightwallet/dist/lightwallet.min.js'),
loading: Loading,
});
export default class Wallet extends React.Component {
render() {
return <LoadableWallet/>;
}
}
我正在尝试使用 React.lazy 提高我的应用程序的性能。由于以太坊轻钱包是一个巨大的文件,我想把它放在一个单独的包中。当前工作的导入如下:
import lightwallet from 'eth-lightwallet/dist/lightwallet.min.js';
当我尝试使用惰性语法导入时
const lightwallet = React.lazy(() => import('eth-lightwallet/dist/lightwallet.min.js'));
只返回一个 React.lazy 对象 ($$typeof: Symbol(react.lazy)) 而不是 lightwallet 对象。我认为这是因为 lightwallet 没有默认导出。我怎样才能解决这个问题?谢谢!
确保您的 React 版本在 React v16.6.0 中是最新的。以及 React 背后的核心思想。 lazy is React.lazy 采用必须调用动态 import() 的函数。这必须 return 一个 Promise 解析为一个包含 React 组件[=15] 的 default export 的模块=].但是这种情况 min.js 不会给出任何承诺。很可能那没有用。
我建议按照此处的示例进行操作:
https://reacttraining.com/react-router/web/guides/code-splitting
react-loadable
是一个 npm 包,它使代码拆分(a.k.a 延迟加载)变得非常容易,并且还为您提供了在延迟加载完成之前呈现加载组件的能力。
唯一的问题是,如果您使用 Babel
转译代码包,则必须添加对动态导入语法的支持,webpack
默认情况下已经支持,但是 Babel
没有。
Babel 插件:
@babel/plugin-syntax-dynamic-import
将通过添加对语法的支持来实现这一点。
我推荐 react-loadable
而不是 React.lazy
,因为它使得在延迟加载发生时显示加载组件非常容易,并为您提供挂钩以显示错误组件并在这种情况下重试导入它失败了。
在此处阅读有关 react-loadable
的更多信息:
https://github.com/jamiebuilds/react-loadable
您的代码将如下所示:
import Loadable from 'react-loadable';
import Loading from './YOUR-LOADING-COMPONENT';
const LoadableWallet = Loadable({
loader: () => import('eth-lightwallet/dist/lightwallet.min.js'),
loading: Loading,
});
export default class Wallet extends React.Component {
render() {
return <LoadableWallet/>;
}
}