javascript - 反应路由器:pushstate后的空白页面
问题描述
我们有一个用于内部门户的自定义 JS 框架,我正在尝试使用状态访问 React 应用程序。
在我的门户中,在菜单上,我有以下代码:
<a onclick="history.pushState(null, 'newstate', '/persons');">Persons</a>
我们侦听状态更改事件,感谢window.onpopstate
. 当它发生时,我们附加与新状态相关的 JS 应用程序。
所以当我点击时,它会生成以下网址:
http://localhost:3000/persons
多亏了这段代码,因为我的 React 应用程序包含在“脚本”标签中,并且当我们检测到状态变化时,我们将 React 应用程序附加到 DOM。以下是在新导入的 React App 中定义路由器的方式:
import React from 'react';
import {BrowserRouter, Switch, Route} from 'react-router-dom';
import PersonsList from './PersonsList';
import Error from './Error'
import Person from './Person'
const Router = () => (
<BrowserRouter>
<Switch>
<Route path="/" strict={false} component={PersonsList}/>
<Route path="/persons/:id" component={Person}/>
<Route component={Error}/>
</Switch>
</BrowserRouter>
);
export default Router;
当它触发该pushState
功能时,第一个路由从门户的主菜单工作,React 应用程序显示,然后第一个定义的路由运行。
问题是PersonsList
,当我尝试到达/persons/:id
路线时,我得到一个空白页。
这是我在 PersonsList 组件中用于重定向的代码:
static propTypes = {
history: PropTypes.object
};
handleRedirection = (aPerson) => {
this.props.history.push(`/persons/${aPerson.id}`);
}
...
{this.state.persons.map(aPerson => (
<React.Fragment key={aPerson.id}>
<div className="row" onClick={this.handleRedirection.bind(this,aPerson)}>
编辑 1:
在第一条评论之后,我将exact
关键字放在路线中。但我仍然得到一个空白页。
这是Person
组件:
import React from 'react';
import PropTypes from 'prop-types';
import { withRouter } from 'react-router';
class Person extends React.Component {
static propTypes = {
match: PropTypes.object
};
constructor(props){
super(props);
console.log('the selected person : ' + this.props.match.params.id);
}
render(){
return(
<div>A person</div>
)
}
}
export default withRouter(Person);
我可以看到console.log
输出,但没有渲染<div>A person</div>
.
问题 为什么第二条路线返回空白内容?
解决方案
推荐阅读
- swift - Swift - 检查两个数组是否在同一天没有循环
- mysql - 为什么当 NOT IN 内部查询包含值“NULL”时结果集为 EMPTY?
- c# - System.ArgumentOutOfRangeException on my RowDataBound
- python - Twitter module has no object 'trends'
- c# - why does a 32-bit value cause a WCF System BadImageFormatException?
- javascript - 用JS改变svg rect颜色
- java - 来自 LayoutInflater 的 FindViewById
- python - 在 Wagtail 中自定义管理 ui-widget
- pytorch - `torch.Tensor` 和 `torch.cuda.Tensor` 之间的区别
- php - 从 Eloquent 集合中选择特定字段 | 拉拉维尔