Tôi đang sử dụng bộ định tuyến phản ứng với việc tải thành phần lười biếng và sử dụng Webpack như một gói , Khi tôi truy cập vào trang chủ, /
tôi có thể thấy trong tab mạng bundle.js
được tải và cả khi tôi nhấp vào một mục cụ thể trong thanh bên, thành phần tương ứng được tải thành công với tên tệp của nó chẳng hạn 0.bundle.js
, tuy nhiên khi tôi điều hướng trực tiếp từ thanh tìm kiếm đến một tuyến đường lồng nhau (ví dụ http://127.0.0.1:8080/forms/select
) tôi gặp một lỗi như thế này:
NHẬN
http://127.0.0.1:8080/forms/bundle.js
mạng :: ERR_ABORTED 404 (Không tìm thấy)
Lỗi này chỉ ra rằng bundle.js
không được tải có nghĩa là nó không thể tải các khối khác.
webpack.config.js
const webpack = require('webpack');
module.exports = {
entry: './src/index.js',
module: {
rules: [],
},
resolve: {
extensions: ['*', '.js', '.jsx'],
},
output: {
path: __dirname + '/dist',
publicPath: '/',
filename: 'bundle.js',
},
plugins: [new webpack.HotModuleReplacementPlugin()],
devtool: 'cheap-module-eval-source-map',
devServer: {
contentBase: './dist',
hot: true,
historyApiFallback: true,
},
};
.babelrc
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
],
"plugins": ["@babel/plugin-syntax-dynamic-import"]
}
Rout.js
import { lazy } from 'react';
const Forms = lazy(() => import('../components/uiViews/Forms'));
const SelectForm = lazy(() => import('../components/uiViews/Forms/SelectForm'));
const FormValidation = lazy(() => import('../components/uiViews/Forms/FormValidation'));
const routes = [
{
icon: 'form',
label: 'forms',
path: '/forms',
component: Forms,
children: [
{
icon: 'select',
label: 'selectInput',
path: '/forms/select',
component: SelectForm,
},
{ icon: 'issues-close', label: 'formValidation', path: '/forms/validation', component: FormValidation },
{
icon: 'form',
label: 'wizardForm',
path: '/forms/wizard',
component: WizardForm,
}],
},
];
export default routes;
kết xuất tuyến đường
<Suspense fallback={<div className="spin-loading"> <Spin size="large" /></div>}>
{routes.map((route, i) => {
return route.component ? RouteWithSubRoutes( {...route},`r${i}`) : null;
})}
</Suspense>
....
function RouteWithSubRoutes(route,key) {
return route.children ? (
route.children.map((subRoute,j) => {
return RouteWithSubRoutes(subRoute,`sr${j}`);
})
) : (
<Route key={key} path={route.path} exact component={() =>route.component? <route.component />:<ComingSoon/>} />
);
}
publicPath
,entry
và / hoặcoutput
con đường, cần mộtpath.resolve()
hoặc hai trong đó.