我有下一个代码:
import React from 'react'
import Loadable from 'react-loadable'
import { Route } from 'react-router-dom'
class App extends React.Component {
state = {
kappa: false
}
componentDidMount() {
setTimeout(() => {
setState({ kappa: true })
}, 1000)
}
render() {
return (
<div className="app">
<Route exact path="/:locale/" component={Loadable({
loader: () => import('../views/IndexPage/index.jsx'),
loading: () => "loading"
})} />
<Route exact path="/:locale/registration" component={Loadable({
loader: () => import('../views/Registration/index.jsx'),
loading: () => "loading"
})} />
{this.state.kappa && <p>Hey, Kappa-Kappa, hey, Kappa-Kappa, hey!</p>}
</div>
)
}
}
当状态更新(kappa
变为真并p
出现)时,活动路由上的组件(无论它是什么 -IndexPage
或Registration
)重新安装。如果我在 App 中手动导入组件并将其传递给Route
没有代码拆分的组件,则不会重新安装路由上的组件(这很明显)。
我也试过 webpack 的动态导入,像这样:
<Route path="/some-path" component={props => <AsyncView {...props} component="ComponentFolderName" />
whereimport(`/path/to/${this.props.component}/index.jsx`)
运行componentDidMount
并填充AsyncView
的状态,它的行为类似于Loadable
情况。
我想,问题是component
forRoute
是一个匿名函数
问题是:如何避免重新安装路由组件?