React中多个AJAX请求的最佳实践?
问题描述:
我正在使用React进行一个个人项目,在这个项目中,我想呈现几个组件,每个组件都使用Yahoo的天气API呈现来自不同城市的数据。React中多个AJAX请求的最佳实践?
最初,我是通过一个包含我想要数据的城市的数组进行映射,将每个城市发送到发出AJAX请求的组件,结果是每个组件都有5到6个自己的呼叫。如果我只想呈现当前的情况或者几个不同的城市的高和低,那工作正常。
但我想用路由器做出反应,使用户点击一个城市的能力,从而导致重新绘制,显示该城市只有细节和一个10天的天气预报。我遇到的问题是项目的当前结构。因为我正在映射父级中的城市数组,所以我可以将其传递给API URL,所以我卡住了所有预测组件。
什么是更好的方式来构建项目并提出AJAX请求,以便一个视图是几个天气分量,另一个是单个详细视图和该城市的10天预测?
class App extends Component {
PLACES = [
{ city: "chattanooga", state: "tn"},
{ city: "easton", state: "md"},
{ city: "new york", state: "ny"},
{ city: "norfolk", state: "va"},
{ city: "milford", state: "de"},
{ city: "bangkok", state: null}
]
render() {
return (
<div className="weather-container">
{
this.PLACES.map((place, id) => {
return <Weather key={place.city} id={id} city={place.city}
state={place.state} />
})
}
</div>
)
}
}
export default App
所以这是父组件映射在PLACES
阵列以使6个<Weather />
组件。然后在<Weather />
组件我做我的AJAX请求componentDidMount()
componentDidMount() {
axios.get(`https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22${this.props.city}%2C%2$${this.props.state}%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys`)
.then(res => {
let data = res.data.query.results.channel;
this.setState({ data : data });
})
.catch((error) => {
console.log(error);
})
}
感谢任何方向!
答
在您的Weather
组件内部,您应该有一个<Link>
到一个新组件,路线看起来像weather/:location
。符号:location
表示您可以接受任何内容,例如chattanooga
。如果您需要通过城市和州,只需做weather/:city/:state
此路线将接受您的参数,然后您可以使用这些参数重新调用您想要查看的特定城市的API以及其新组件内的10天预测。
你可以通过调用this.props.match.params.location
或this.props.match.params.city
访问您的新组件的内部帕拉姆等
我明白你在说什么,但不这样做,在'' 组件安德6种不同的' '元件,因为' '的父组件中的'.map()'?对不起,如果我错过了什么。 –
joehdodd
我建议您创建的只有一个新组件。一旦你点击一个城市/州,它将被调用。一旦你点击另一个城市或州,它将被再次调用,具有不同参数的相同组件,因此不同的API调用/不同的数据。不是6个不同的。 –