react-router / redux-simple 路由器加载深度路由
react-router / redux-simple router loading deep routes
我正在努力解决使用 react-router(使用 redux-simple-router,fwiw)应该是一件简单的事情。
我有一些基本的路线定义如下:
<Route path="/" component={AppRoot}>
<Route path="all" component={ScheduledReportList} mine={false}/>
<Route path="mine" component={ScheduledReportList} mine={true}/>
<Route path="report/:name" component={ScheduledReportList} mine={false}/>
</Route>
ScheduledReportList
的 redner 方法具有处理 mine
参数的功能,以及处理 name
道具存在(或缺失)的逻辑(剪下不存在的片段) '相关)。
render() {
const { name } = this.props.params;
if (name != undefined && name != null) {
// we are displaying details for a single report only
let values = getScheduledReports();
let currentReport = _.find(values, (report) => {
return report.name == name;
});
if (this.props.route.mine) {
return (
<MyReportDetails... />
);
} else {
return (
<ReportDetails... />
);
}
} else {
// we are displaying all reports
<snip...>
values.map((report, i) => {
let anchor = undefined;
if (this.props.route.mine) {
anchor = <a onClick={() => {this.props.routeActions.replace('/myreport/' + report.name)}}>{report.name}</a>
} else {
anchor = <a onClick={() => {this.props.routeActions.replace('/report/' + report.name)}}>{report.name}</a>
}
<snip...>
我的问题是:客户端我可以很好地导航。使用调用 routeActions.replace()
或 routeActions.push()
的锚点或跨度,然后一切都很好。问题特别是当我在 "deep" 路径中(即其中有一个斜线:/reports/fooReport
与 /all
)并且我刷新页面时,或者如果我尝试导航直接给它。尝试加载 /reports/foo
页面服务器端给我一个 SyntaxError: expected expression, got '<'
错误,就好像它不期望加载 webpack js 的 index.html 一样。我可以很好地导航到 /mine,这是没有意义的。
我缺少什么简单的东西来让它同时用于直接和间接导航?谢谢!
好吧,我终于想通了,这与我一直在想的没什么关系。事实证明我的 getScheduledReports() 方法脱离了 redux 状态将被填充的假设,并且当导航到 reports/whatever 时它不是马上。
添加 null/undefined 检查 redux 存储中的状态对象并在它不存在时返回 null 为我修复了它。一旦商店填充并且报告可用,我的组件就会看到它并刷新。
您可以像这样在 react-router
中进行深度路由:
<Route path="/" component={Layout} >
<IndexRoute component={Homepage} />
<Route path="home" component={Homepage} />
<Route path="bayaans" component={Bayaans} />
<Route path="read-quran" component={Readquran} />
<Route path="duas" component={Duas} />
<Route path="events" component={Events} />
<Route path="contact" component={Contactpage} />
</Route>
<Route path="/admin" component={AdminLayout} >
<IndexRoute component={LoginPg} />
<Route path="dashboard" component={Dashboard} />
<Route path="list-bayaans" component={AdminBayaansPg} />
<Route path="list-duas" component={AdminDuasPg} />
<Route path="list-events" component={AdminEventsPg} />
</Route>
我正在努力解决使用 react-router(使用 redux-simple-router,fwiw)应该是一件简单的事情。
我有一些基本的路线定义如下:
<Route path="/" component={AppRoot}>
<Route path="all" component={ScheduledReportList} mine={false}/>
<Route path="mine" component={ScheduledReportList} mine={true}/>
<Route path="report/:name" component={ScheduledReportList} mine={false}/>
</Route>
ScheduledReportList
的 redner 方法具有处理 mine
参数的功能,以及处理 name
道具存在(或缺失)的逻辑(剪下不存在的片段) '相关)。
render() {
const { name } = this.props.params;
if (name != undefined && name != null) {
// we are displaying details for a single report only
let values = getScheduledReports();
let currentReport = _.find(values, (report) => {
return report.name == name;
});
if (this.props.route.mine) {
return (
<MyReportDetails... />
);
} else {
return (
<ReportDetails... />
);
}
} else {
// we are displaying all reports
<snip...>
values.map((report, i) => {
let anchor = undefined;
if (this.props.route.mine) {
anchor = <a onClick={() => {this.props.routeActions.replace('/myreport/' + report.name)}}>{report.name}</a>
} else {
anchor = <a onClick={() => {this.props.routeActions.replace('/report/' + report.name)}}>{report.name}</a>
}
<snip...>
我的问题是:客户端我可以很好地导航。使用调用 routeActions.replace()
或 routeActions.push()
的锚点或跨度,然后一切都很好。问题特别是当我在 "deep" 路径中(即其中有一个斜线:/reports/fooReport
与 /all
)并且我刷新页面时,或者如果我尝试导航直接给它。尝试加载 /reports/foo
页面服务器端给我一个 SyntaxError: expected expression, got '<'
错误,就好像它不期望加载 webpack js 的 index.html 一样。我可以很好地导航到 /mine,这是没有意义的。
我缺少什么简单的东西来让它同时用于直接和间接导航?谢谢!
好吧,我终于想通了,这与我一直在想的没什么关系。事实证明我的 getScheduledReports() 方法脱离了 redux 状态将被填充的假设,并且当导航到 reports/whatever 时它不是马上。
添加 null/undefined 检查 redux 存储中的状态对象并在它不存在时返回 null 为我修复了它。一旦商店填充并且报告可用,我的组件就会看到它并刷新。
您可以像这样在 react-router
中进行深度路由:
<Route path="/" component={Layout} >
<IndexRoute component={Homepage} />
<Route path="home" component={Homepage} />
<Route path="bayaans" component={Bayaans} />
<Route path="read-quran" component={Readquran} />
<Route path="duas" component={Duas} />
<Route path="events" component={Events} />
<Route path="contact" component={Contactpage} />
</Route>
<Route path="/admin" component={AdminLayout} >
<IndexRoute component={LoginPg} />
<Route path="dashboard" component={Dashboard} />
<Route path="list-bayaans" component={AdminBayaansPg} />
<Route path="list-duas" component={AdminDuasPg} />
<Route path="list-events" component={AdminEventsPg} />
</Route>