Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何仅在需要时在react路由器中加载组件?_Reactjs_Requirejs_React Router - Fatal编程技术网

Reactjs 如何仅在需要时在react路由器中加载组件?

Reactjs 如何仅在需要时在react路由器中加载组件?,reactjs,requirejs,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: "/",

考虑以下示例代码:

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组件

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


在Angular中,
ng视图
在用户访问URL时加载视图。我也希望在React中发生类似的事情。

我已经成功地做到了,但您需要使用像Webpack这样的捆绑程序来实现它。首先,您需要将路由拆分,以便动态加载。您可以查看on react路由器,了解如何动态设置路由。基本上,您可以延迟加载组件,因为每个路由都有一个
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} />

react router上的大型应用程序示例也展示了它的工作原理,我使用它作为我的项目的基础,来分割我非常大的捆绑文件

我已经成功地完成了,但您需要使用像Webpack这样的捆绑包来实现它。首先,您需要将路由拆分,以便动态加载。您可以查看on react路由器,了解如何动态设置路由。基本上,您可以延迟加载组件,因为每个路由都有一个
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} />

react router上的大型应用程序示例也展示了它的工作原理,我使用它作为我的项目的基础,来分割我非常大的捆绑文件

“从服务器加载”是什么意思?该组件是否执行提取?对于React Router,除非路由匹配,否则不会呈现组件。这是不可能的,因为需要的模块实际上是将它们捆绑到一个javascript文件中,然后您一次加载所有这些文件。您如何理解“从服务器加载”呢?该组件是否执行提取?对于React Router,除非路由匹配,否则不会呈现组件。这是不可能的,因为需要的模块实际上是将它们捆绑到单个javascript文件中,您可以一次加载所有这些文件。谢谢,它会在需要时加载包括css文件(导入组件中)的组件。如果我离开这个页面(或组件),如何删除css文件?谢谢,它会在需要时加载包括css文件(导入到组件中)的组件。如果我离开这个页面(或组件),如何删除css文件?