首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加React.lazy或react可加载并执行动态导入(代码拆分)将使我的一些功能中断。

添加React.lazy或react可加载并执行动态导入(代码拆分)将使我的一些功能中断。
EN

Stack Overflow用户
提问于 2019-08-06 11:10:16
回答 2查看 2.2K关注 0票数 0

我在寻找一种方法来动态导入我的组件,只使用它们的名称,在寻找了一段时间之后,我了解了code splittingReact.lazyreact-loadableloadable-component之类的东西,我做了一些测试用例,并且在了解了所有东西是如何工作的之后,我设法将它插入到我的项目中,并重构我的类来处理这个问题。

我遇到的主要问题是我的应用程序中有一些东西坏了,例如我的checkbox不能工作,而且.在将动态导入从呈现移到外部、函数内,然后调用该函数并传递道具来执行动态导入之后,我设法修复了这个问题,现在另一件事被破坏了,恐怕会发生更多类似的事情,这是因为动态导入是如何工作的吗?!我应该停止使用它吗??,我花了一整天的时间试图理解我以前的工作代码有什么问题!

现在我的问题是,我是否需要遵循某种指南来使用我没有的动态编码,而现在它使我的代码中断,或者在某些情况下,这些方法仅仅是过于实验性和有点错误?!,或者对于一个已经完成了一半的项目来说,将类似的东西添加到项目中已经太晚了吗?

下面是我的代码及其最新的更改,您可以大致了解我正在做什么:

代码语言:javascript
复制
const AsyncPage = loadable(props => import(`${props.page}`))

class MyClassComponent extends Component {
    render  () {
        const importPath = './UI/' + UIType + '/' + UIType; 
        return (                            
            <AsyncPage page={importPath} {someOtherComponentProps}>{UIchildrens}</AsyncPage>
        )
    }
}

任何帮助和建议都是非常感谢的,谢谢。

Update01:

我设法解决了当前的问题!,它似乎我有相同的钥匙在我的地图,这导致了这个特殊的问题!,有趣的是,这是只发生在我添加懒惰加载!而且它对正常的导入也很好,奇怪,但是我想他们确实提到在地图中没有一个好钥匙会导致奇怪的问题。

EN

回答 2

Stack Overflow用户

发布于 2019-08-17 18:39:29

在使用react-loadable时,我发现如果我把所有的URL都放在变量中,它就找不到模块,并且我得到了模块,没有找到错误。但是,如果我使用字符串文字作为基址,那么它就能工作了。例如,以下内容对我不起作用:

加载程序:() =>导入(item.url)

这一次起作用的是:

加载程序:() =>导入(‘./示例/’+ item.fileName)

票数 3
EN

Stack Overflow用户

发布于 2019-08-06 11:47:14

正如在反应文档中提到的,您应该使用React.lazy和悬念的组合来让事情运行。您不必使用其他库,因为React已经为您提供了这些库。因此,首先用于导入,它看起来很好,但是应该移到使用React.lazy

代码语言:javascript
复制
const AsyncPage = React.lazy(() => import(`${props.page}`));

但这仅仅是使其运行的进程的一半。因为您在呈现函数中直接呈现页面,它将在页面加载时中断。这就是为什么您必须将所有react.lazy调用包装在一个悬念组件中,这将在页面加载时呈现回退:

代码语言:javascript
复制
class MyClassComponent extends Component {
render  () {
    const importPath = './UI/' + UIType + '/' + UIType;         
    const AsyncPage = React.lazy(() => import(importPath));
    return (       
        <Suspense fallback={'...Loading}>            
            <AsyncPage {someOtherComponentProps}>{UIchildrens}</AsyncPage>
        </Suspense>         
    )
}}

这将在组件加载时显示回退(加载字符串),并在下载完成后显示页面。这应该是开箱即用的,它不应该中断和功能上,snceit是选择和即插即用而不改变您的反应代码的工作方式。

希望这能有所帮助。编码愉快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57374681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档