【问题标题】:Code-splitting and async code loading in react-boilerplatereact-boilerplate 中的代码拆分和异步代码加载
【发布时间】:2017-11-11 16:45:41
【问题描述】:

我开始在我的项目中使用 react-boilerplate,并试图弄清楚路由是如何在那里工作的。你能解释一下这个example in docsexample in app 吗?

  • 为什么getComponent()函数相对于简单的react-router路由定义<Route path='somepath' component={SomeContainer} />来说这么大?
  • 为什么要调用injectReducersinjectSagas

谢谢!

path: '/posts/:slug',
name: 'post',
getComponent(nextState, cb) {
 const importModules = Promise.all([
   import('containers/Post/reducer'),
   import('containers/Post/sagas'),
   import('containers/Post'),
 ]);

 const renderRoute = loadModule(cb);

 importModules.then(([reducer, sagas, component]) => {
   injectReducer('post', reducer.default);
   injectSagas(sagas.default);
   renderRoute(component);
 });

 importModules.catch(errorLoading);
},

【问题讨论】:

    标签: reactjs react-router react-router-redux react-boilerplate


    【解决方案1】:

    injectReducerinjectSagas 用于代码拆分。代码是说“当这条路线被调用时,加载这些减速器和传奇”。 Webpack 会查看并相应地将代码拆分为不同的文件。

    如果它是一个小应用程序,则没有必要,但如果它是一个巨大的应用程序,代码拆分可以帮助减少初始加载时间。

    【讨论】:

    • 谢谢!如果我使用 reducer 和 sagas,是否需要调用这些方法?
    • 是的。尽管您可以将整个文件从代码拆分中重构出来。我在这里的一个宠物项目上做了这个:github.com/vonkanehoffen/wp-react/blob/master/app/routes.js
    • 我明白了。实际上,我更喜欢你项目中的结构,而不是 react-boilerplate 中的默认结构。
    • 我明白了背后的想法。最初,我们从其他减速器中组合了一些根减速器。当我们去任何路线时,我们必须向我们的根减速器添加一个新的减速器,我们使用injectReducer 执行此操作。如果我们不想异步加载减速器,我们可以将它们导入根减速器reducers.js。我说的对吗?
    • 很高兴你喜欢它! ......是的,这会奏效。考虑像这样的大型复杂样板,重要的是不要忽视基础知识!
    猜你喜欢
    • 2017-10-15
    • 2018-06-21
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2016-04-27
    • 2017-06-13
    相关资源
    最近更新 更多