jhi*_*jhi 6 lazy-loading reactjs react-router react-suspense
我在动态路由上使用了 react lazy 和 suspense,但不知何故我无法渲染延迟加载的组件。
我已经搜索了关于在路由上使用 lazy 的信息,但我还没有看到有人在动态(localhost:8080/ dynamic / dynamic)路由上使用它。
在动态路由上加载组件对我有用,如果我有静态路由,延迟加载也适用,但是当我尝试将两者结合时,组件不会加载。
这是我所做的一个例子,
import Loader from './path/toFile';
import Home from './path/toFile';
const LazyLoadedComponent = lazy(() => import('./path/toFile'));
const App = () => {
return(
<Router>
<Switch>
// Home has multiple views controlled by buttons
// A view contains selections with corresponding id
<Route exact path="/:viewType?" component={Home} />
// this component doesn't load when I select something which links me to this dynamic route.
<Suspense fallback={Loader}>
<Route path="/viewType/:selectionId" component={LazyLoadedComponent} />
</Suspense>
</Switch>
</Router>
)
}
Run Code Online (Sandbox Code Playgroud)
我只想在我去那条路线后加载我的组件。但结果是它加载了主页,但是当我从选择中选择一个时,它只显示 index.html 空白,我没有看到产生任何错误。
我认为,使用反应悬念或懒惰没有问题。只是Switch以错误的方式使用。
正如反应路由器文档所说:
a 的所有子元素
<Switch>都应该是<Route>或<Redirect>元素。只会呈现与当前位置匹配的第一个孩子。
因此,Switch组件可能无法识别由 Suspense 组件包装的 Route。
例如:
import Loader from './path/toFile';
import Home from './path/toFile';
const LazyLoadedComponent = lazy(() => import('./path/toFile'));
const App = () => {
return(
<Router>
<Suspense fallback={Loader}>
<Switch>
<Route exact path="/:viewType?" component={Home} />
<Route path="/viewType/:selectionId" component={LazyLoadedComponent} />
</Switch>
</Suspense>
</Router>
)
}
Run Code Online (Sandbox Code Playgroud)
这是代码沙箱中的示例:https : //codesandbox.io/s/async-react-router-v4-w-suspense-8p1t6
我已经找到了解决方案..或者在我的情况下找到了解决方案。
我包含了我的包的publicPath 。
我将其添加到我的 webpack.config.js 中
output: {
publicPath: '/',
},
Run Code Online (Sandbox Code Playgroud)
上次它不起作用的问题是我只是刷新页面知道已经安装了 hotmodule 但它不会更新我的配置。
所以重新启动服务器后我看到了这一行
webpack 输出由(我声明的 publicPath)提供
尽管我在这个问题上花费了比我应该花的时间更多的时间。现在正在运行,感谢所有评论。
| 归档时间: |
|
| 查看次数: |
5261 次 |
| 最近记录: |