gpt4 book ai didi

javascript - 在 React-Router Children 中渲染 Ajax 请求

转载 作者:行者123 更新时间:2023-11-28 06:26:16 24 4
gpt4 key购买 nike

我在使用 React-Router 和 AJAX 请求时遇到问题。

这是index.js(入口文件):

import React from 'react';
import { render } from 'react-dom';
import { App } from './App';
import { Router, Route, IndexRoute, browserHistory } from 'react-router';

import Utente from './routes/Utente';
import UtenteView from './routes/UtenteView';

render(
<Router history={browserHistory}>
<Route path="/" utente={mattia} component={App}>
<Route path="user/:id" component={User}>
<IndexRoute component={UserView}/>
<Route path="rete" component={Rete}></Route>
</Route>
</Route>
</Router>,
document.getElementById('root')
)

App.js 文件只有渲染函数,返回

<div>{this.props.children}</div>

调用用户组件。用户文件几乎相同。

在 UserView.js 文件中,我使用 superagent 发出 AJAX 请求。

import React, { Component } from 'react';
import request from 'superagent';

export default class UserView extends Component{
constructor(props) {
super(props);
this.state = {
result: null
};
this.fetchRequest = this.fetchRequest.bind(this)
}
makeRequest(id){
request
.get('/API/user/' + id)
.end(function(err, value){
if (value){
return({
result: JSON.parse(value.text).name
})
}
});
}

fetchRequest(){
this.setState(this.makeRequest(this.props.params.id));
}

componentDidMount(){
this.fetchRequest();
}

render(){
if(typeof this.state.result !== 'undefined'){
return(
<div>
<p>Questa è la pagina di {oggetto.id}</p>
</div>
)
}
return(
<div>
<h4>Loading data...</h4>
</div>
)
}
}

但这不起作用,它给了我错误:

Warning: setState(...): You passed an undefined or null state object; instead, use forceUpdate().
为什么?我认为错误在于我试图通过 child 来操纵 parent 的状态。

最佳答案

问题在于 makeRequest 是异步的,您无法从中返回。你应该这样做:

makeRequest(id){
request
.get('/API/user/' + id)
.end((err, value) => {
if (value){
this.setState({
result: JSON.parse(value.text).name
})
}
});
}

另外,我会用你的组件做类似的事情。您不应该重写您的设置的构造函数。另外,检查一下获取:

import React, { Component } from 'react';
import fetch from 'whatwg-fetch';

export default class UserView extends Component{

componentDidMount() {
this.fetchRequest(this.props.params.id)
},

fetchRequest(){
fetch('/API/user/' + id)
.then((response) => {
return response.json()
})
.then((json) => {
this.setState({
result: json.name
})
})
.catch((ex) => {
console.log('parsing failed', ex)
})
}

getLoadingMessage() {
if(typeof this.state.result === 'undefined') {
return
}

return (
<div>
<h4>Loading data...</h4>
</div>
)
},

getMessage() {
if(typeof this.state.result !== 'undefined') {
return
}

return (
<div>
<p>Questa è la pagina di {oggetto.id}</p>
</div>
)
},

render(){
return (
<div>
{ this.getLoadingMessage() }
{ this.getMessage() }
</div>
)
}
}

关于javascript - 在 React-Router Children 中渲染 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35103279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com