老实说,这段代码拆分已经有点累了。 我们大家走来走去,这是主要问题。
代码拆分从模块级别的分离开始,到组件级别的分离结束。
而且这里的问题完全在
脑子里-React.lazy很好,但是
导入并没有
消失 ...那么为什么代码仅在组件上拆分?
React.lazy,React-Loadable,Loadable-Components,Imported-component-世界上有许多库将模块加载包装在一些糖中,只是为了稍微方便用户地处理组件加载并显示就绪状态。 异步加载程序的最小代码。
const loadable = (loaderFunction) => class AsyncComponent extends React.Component { state = { ResultComponent: null, error: false, }; componentWillMount() { loaderFunction .then(result => this.setState({ ResultComponent: result.default || result}))
Suspense和React.lazy只是使用状态的另一种方式。 没什么
但是,如果没有组件怎么办?
似乎没有问题
-import(“ someStuff”)。然后('go-on') 。 但是,这里又有一个问题开始,即如何将其正确放置在React生命周期中,该怎么做,组件失效后诺言是否已解决,等等。 并且所有的头部都是一个组成部分。
我进行了一次小型调查-NOBODY不再使用此最旧的代码拆分版本。 不知道如何在现代条件下食用。 通常,一切都不好。
有一个解决方案,并在4行中再次显示-renderProps
一切都很简单-尽管代码拆分的对象不是Component而是Module,但Component仍然是操作的地方。
const loadableModule = (loaderFunction) => class AsyncComponent extends React.Component { state = { ResultComponent: null, error: false, }; componentWillMount() { loaderFunction .then(result => this.setState({ module: result.default || result}))
相同的模式只是朝着加载代码并将此代码“提供”为renderProps的方向。
开箱即用:
- loadable-components( loadable.lib )
import loadable from '@loadable/component' const Moment = loadable.lib(() => import('moment')) function FromNow({ date }) { return ( <div> <Moment fallback={date.toLocaleDateString()}> {({ default: moment }) => moment(date).fromNow()} </Moment> </div> ) }
- react-lodable( react-loadable-library )
import {importedLibraryDefault} from 'react-loadable-library'; const Moment = importedLibraryDefault( () => import('momentjs')); <Moment> { (momentjs) => <span> {momentjs(date).format(FORMAT)}</span> } </Moment>
- react-imported-component( react-imported-library )
便宜又很生气。 这使我又削减了20%。 但是,最重要的是,它允许非常声明性地设置代码拆分,这将仅加载所需的内容和必要的时间。
现在您的行动,%用户名%。
谁会在钩子上重写它?