reactjs - 如何仅在需要时才加载React Router中的组件?

标签 reactjs requirejs react-router

考虑这个示例代码:

require(["js/components/feed-component", "js/components/single-post-component"], function (x, y) {
    ReactDOM.render(React.createElement(
        Router,
        { history: BrowserHistory },
        React.createElement(Route, { path: "/", component: x }),
        React.createElement(Route, { path: "post", component: y})
    ), document.getElementById("appContainer"));
});

即使用户从未访问过 /post 页面,这里的 js/components/single-post-component 组件也会从服务器加载。

如何避免这种情况?如何使组件仅在用户访问 URL 时才加载。

在 Angular 中,ng-view 当用户访问 URL 时会加载 View 。我希望 React 中也能发生类似的事情。

最佳答案

我已经成功完成了,但是你需要使用像 Webpack 这样的 bundler 来实现它。首先,您需要分割路由,以便它们动态加载。你可以看看example在 React Router 上了解如何动态设置路由。基本上,您可以推迟组件的加载,因为每个路由都有一个 getComponent 方法。

  ...imports

  let rootRoute = {
    path: '/',
    name: 'root',
    component: require('./containers/App2'),
    indexRoute: {
      getComponent: (location, cb) => {
       return require.ensure([], (require) => {
        cb(null, require('./containers/App'))
       })
     }
  }

  //routes is now an object
  <Router history={appHistory} routes={rootRoute} />

因此,您已经推迟了所需组件的加载,直到调用您的路由为止。这也是分解应用程序中模块的好方法。

现在在 Webpack 中(抱歉,这是我唯一有过使用经验的),它只能返回您访问的应用程序部分。

这是我的 webpack.config 文件的顶部。

module.exports = {
  devtool: 'eval-source-map',
  entry: ['./htdocs/js/index'],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: 'https://localhost:3000/dist/'
  },
  //other settings down here
}

react 路由器上的巨大应用程序示例也展示了它是如何工作的,我用它作为我的项目的基础来分割我非常大的捆绑文件。

关于reactjs - 如何仅在需要时才加载React Router中的组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36268237/

相关文章:

javascript - 匹配两个特殊字符之间的子字符串,不包括字符

javascript - React router - 具有固定值的路由中的参数

javascript - Redux - 相同的 reducer 、容器和组件产生不同的结果

javascript - 未定义不是函数 - RequireJS

css - Firefox/Gecko 在另一个域中加载 css?这是什么意思?

angularjs - AngularStrap 2.x 与 requirejs 一起使用时抛出 404 Not Found

reactjs - 如何在React Link组件上使用onClick事件?

node.js - 如何使用重定向的 url 作为 <img>、<audio> 或 <video> 的源?

reactjs - react 导航 withNavigation 返回未定义

javascript - 数字输入不会将 0 作为 React 应用程序中的值