Я пытаюсь обновить кодовую базу реагирования двухлетней давности, чтобы использовать последнюю версию реагирующего и реагирующего маршрутизатора. Я вообще не касался конфигурации веб-пакета и предполагаю, что мне это не понадобится. Я новичок в мире реакции, так что, пожалуйста, потерпите меня. У меня есть несколько вопросов, которые я объединю в один вопрос, так что он будет довольно длинным.
- Связки:
Конфигурация webpack загружает файл js в качестве точки входа.
var entry = { appBundle : ["./src/index.js"] }
а в index.js мы делаем что-то вроде:
var mainRoutes = {
component: "div",
childRoutes: [
{
path: "/",
component: require("./components/LandingPage.jsx"),
childRoutes: [
require("./components/dashboard"),
..
..
]
}
}
а потом,
React.render(
React.createElement(Router, { history: browserHistory, routes: mainRoutes }),
document.getElementById("app-container")
);
Я сохранил точку входа такой же, но изменил содержимое index.js на что-то вроде:
ReactDOM.render((
<BrowserRouter>
<LandingPage />
</BrowserRouter>
), document.getElementById("app-container"));
а внутри LandingPage.jsx я определил все маршруты верхнего уровня следующим образом:
render() {
return (
<main>
<Switch>
<Route path='/dashboard' component={Dashboard}/>
..
</Switch>
</main>
);
}
Маршрутизация работает нормально и все ок. Но разница, которую я вижу, заключается в том, что раньше webpack выдавал что-то вроде:
Asset Size Chunks Chunk Names
14
appBundle.js xxx kB 0 appBundle
dashboard.js xxx kB 1 dashboard
.. and so on for most components
но сейчас это:
Asset Size Chunks Chunk Names
1
appBundle.js xxx kB 0 appBundle
Итак, Q1: мне не хватает некоторых конфигураций для создания пакетов, как раньше?
- getComponents
В каждой папке нашего компонента у нас есть файл index.js с таким содержимым:
"use strict";
module.exports = {
path: "dashboard",
getComponents(location, cb) {
require.ensure([], (require) => {
cb(null, require("./Dashboard.jsx"));
}, "dashboard");
}
};
Я знаю, что getComponents больше не поддерживается в реактивном маршрутизаторе v4. Этот фрагмент кода загружал компонент асинхронно (и создавал ли разные пакеты?)?
Q2: Чем следует заменить файлы getComponents и index.js?
- Вложенные маршруты
React router 4 не поддерживает вложенные маршруты, и я должен добавлять компоненты везде, где мне нужны вложенные маршруты. Но я не знаю, где именно. Скажем, наши компоненты выглядят так:
"use strict";
// import stuff
class DashboardContainer extends React.Component {
render() {
return (
<Dashboard {...this.props} />
);
}
}
class Dashboard extends React.Component {
render() {
return (
<div></div>
<SomeOtherComponent/>
);
}
}
export default DashboardContainer;
Я изменил это на (со всем остальным кодом то же самое)
class Dashboard extends React.Component {
render() {
return (
<div>
<div></div>
<SomeOtherComponent/>
<Route path='/childComponent' component={ChildComponent}/>
</div>
);
}
}
но дочерний компонент не отображается.
Q3: Где мне нужно определить маршрут дочернего / вложенного компонента?
Сообщите мне, если потребуется дополнительная информация. Спасибо.