Reactjs 按路线取数
我在route/journal/:id上有一个页面,然后我想用这个“id”从api获取数据。我将fetch添加到componentDidMount中,但如果我已经在route/journal/:id的页面上,并从该页面使用到其他/journal/:id,则页面不会更改 似乎还有其他方法可以做到这一点。请帮忙 以下是代码:Reactjs 按路线取数,reactjs,fetch,Reactjs,Fetch,我在route/journal/:id上有一个页面,然后我想用这个“id”从api获取数据。我将fetch添加到componentDidMount中,但如果我已经在route/journal/:id的页面上,并从该页面使用到其他/journal/:id,则页面不会更改 似乎还有其他方法可以做到这一点。请帮忙 以下是代码: //router page <Route component={ListLayout}> <Route path="/journals" comp
//router page
<Route component={ListLayout}>
<Route path="/journals" component={Journals} />
<Route path="/journal/:id" component={Journal} />
<Route path="/shelves" component={Shelves} />
</Route>
export default class Journal extends Component {
state = {
reader: false,
journal: {}
}
componentWillMount(){
const myHeaders = new Headers();
myHeaders.append('X-User-Agent', '84e6f2c45955b65b');
const myInit = { method: 'GET',
headers: myHeaders//,
//mode: 'cors',
//cache: 'default'
};
const myRequest = new Request(`/issues/${this.props.location.pathname.split('/').pop()}`,
myInit);
fetch(myRequest)
.then(response => {
return response.json();
})
.then(data => {
console.log(data);
this.setState({journal: data.data});
})
.catch( console.log );
}
render() {
let { journal } = this.state;
<div className="JournalPage__Title">{journal.magazine_title}</div>
<div className="JournalPage__Description">{journal.description}</div>
<Link to="/journal/432">Test fetch</Link>
}
}
//路由器页面
导出默认类日志扩展组件{
状态={
读者:错,
日记账:{}
}
组件willmount(){
const myHeaders=新的头();
append('X-User-Agent','84e6f2c45955b65b');
const myInit={method:'GET',
标题:myHeaders/,
//模式:“cors”,
//缓存:“默认”
};
const myRequest=new Request(`/issues/${this.props.location.pathname.split('/').pop()}`,
肌炎);
获取(myRequest)
。然后(响应=>{
返回response.json();
})
。然后(数据=>{
控制台日志(数据);
this.setState({journal:data.data});
})
.catch(console.log);
}
render(){
让{journal}=this.state;
{journal.magazine_title}
{journal.description}
测试获取
}
}
当您仅更改参数时,组件不会再次加载,但它已收到新的道具,因此您需要在执行参数检查后再次从componentWillReceiveProps调用API。我将把代码重构成这样
另外,您可以使用this.props.location.params
直接获取路径参数。如果您使用的是react router v4,请参阅关于如何从路径获取参数的回答
导出默认类日志扩展组件{
状态={
读者:错,
日记账:{}
}
组件willmount(){
APIRequest(this.props.location.params);
}
组件将接收道具(下一步){
const{params:nextrams}=nextProps.location;
const{params}=this.props.location;
if(params.id!==nextParams.id){
APIRequest(nextParams.id);
}
}
APIRequest=(id)=>{
const myHeaders=新的头();
append('X-User-Agent','84e6f2c45955b65b');
const myInit={method:'GET',
标题:myHeaders/,
//模式:“cors”,
//缓存:“默认”
};
const myRequest=新请求(`/issues/${id}`,
肌炎);
获取(myRequest)
。然后(响应=>{
返回response.json();
})
。然后(数据=>{
控制台日志(数据);
this.setState({journal:data.data});
})
.catch(console.log);
}
render(){
让{journal}=this.state;
{journal.magazine_title}
{journal.description}
测试获取
}
}
当您仅更改参数时,组件不会再次加载,但它已收到新的道具,因此您需要在执行参数检查后再次从componentWillReceiveProps调用API。我将把代码重构成这样
另外,您可以使用this.props.location.params
直接获取路径参数。如果您使用的是react router v4,请参阅关于如何从路径获取参数的回答
导出默认类日志扩展组件{
状态={
读者:错,
日记账:{}
}
组件willmount(){
APIRequest(this.props.location.params);
}
组件将接收道具(下一步){
const{params:nextrams}=nextProps.location;
const{params}=this.props.location;
if(params.id!==nextParams.id){
APIRequest(nextParams.id);
}
}
APIRequest=(id)=>{
const myHeaders=新的头();
append('X-User-Agent','84e6f2c45955b65b');
const myInit={method:'GET',
标题:myHeaders/,
//模式:“cors”,
//缓存:“默认”
};
const myRequest=新请求(`/issues/${id}`,
肌炎);
获取(myRequest)
。然后(响应=>{
返回response.json();
})
。然后(数据=>{
控制台日志(数据);
this.setState({journal:data.data});
})
.catch(console.log);
}
render(){
让{journal}=this.state;
{journal.magazine_title}
{journal.description}
测试获取
}
}
我是从那一页来到这里的,那是什么mean@ShubhamKhatri如果我已经在route/journal/:id的页面上,并使用从该页面到其他/journal/:id的页面,我需要在route上的时间精确道具。我从该页面来到这里,这是什么意思mean@ShubhamKhatri如果我已经在route/journal/:id页面上,并从该页面使用到其他/journal/:id页面,请查看我在route上需要的时间确切的道具。谢谢您的回答。不确定,但我想当时它是由路线上的exact
prop解决的。谢谢你的回答。不确定,但我想当时它是由路线上的exact
prop解决的。