Javascript 如何使用react router设置嵌套路由以使用react JS加载嵌套上下文?
我需要使用与react中的上下文加载同步的Javascript 如何使用react router设置嵌套路由以使用react JS加载嵌套上下文?,javascript,reactjs,react-router,react-context,Javascript,Reactjs,React Router,React Context,我需要使用与react中的上下文加载同步的react路由器实现嵌套路由机制 其思想是加载模块,并为每个模块加载页面 在应用程序加载(App)时,我需要加载appContext 对于每个模块更改,我都需要重新加载moduleContext,但是不需要再次加载appContext 简单地说: 在应用程序加载时加载appContext 默认模块加载时加载moduleContext 来自同一模块的另一个页面==>不加载任何内容,因为它同时具有两个有效上下文 来自另一个模块的另一个页面==>仅加载modu
react路由器
实现嵌套路由机制
其思想是加载模块,并为每个模块加载页面
在应用程序加载(App
)时,我需要加载appContext
对于每个模块更改,我都需要重新加载moduleContext
,但是不需要再次加载appContext
简单地说:
moduleContext
moduleContext
,因为appContext
仍然有效class App extends Component {
render = () => {
let routes = null;
if (!isAuthenticated()) {
routes = <Auth />;
} else {
routes = (
<Switch>
<Route exact path="/logout" render={() => logout()} />
<Route exact path="/auth" render={() => logout()} />
<Route component={AppLoader} />
</Switch>
);
}
return <BrowserRouter>{routes}</BrowserRouter>;
};
}
class AppLoader extends Component {
render = () => {
return (
<AppContextLoader>
<ModulesLoader {...this.props} />
</AppContextLoader>
);
};
}
class ModulesLoader extends Component {
render = () => {
let { location } = this.props;
return (
<Switch>
<Route
path="/module1"
render={props => <Module module="module1" />}
/>
<Route
path="/module2"
render={props => <Module module="module2" />}
/>
</Switch>
);
};
}
class Module extends Component {
static propTypes = {
module: PropTypes.string.isRequired
};
render = () => {
let { module } = this.props;
return (
<ModuleContextLoader module={module}>
<h1>Load Page Here</h1>
</ModuleContextLoader>
);
};
}
类应用程序扩展组件{
渲染=()=>{
让routes=null;
如果(!isAuthenticated()){
路线=;
}否则{
路线=(
注销()}/>
注销()}/>
);
}
返回{routes};
};
}
类AppLoader扩展组件{
渲染=()=>{
返回(
);
};
}
类ModulesLoader扩展组件{
渲染=()=>{
设{location}=this.props;
返回(
}
/>
}
/>
);
};
}
类模块扩展组件{
静态类型={
模块:PropTypes.string.isRequired
};
渲染=()=>{
设{module}=this.props;
返回(
在这里加载页面
);
};
}
我的问题是,每次页面更改时,我都会重新加载appContext
和moduleContext
而这并不是预期的行为
如何正确嵌套路由器以获得我想要的结果?你能提供代码沙盒吗?有关嵌套路由,请参阅。在路由中,您可以使用React.LazySwitchs以独占方式延迟加载组件渲染路由,即仅第一个匹配路由。如果需要同时呈现多个组件/路由,则需要使用路由器。