【发布时间】:2019-03-25 02:12:24
【问题描述】:
我正在使用 OpenWeatherMap API 在 React 中创建一个天气应用程序。有输入表单和一个按钮,当我单击按钮时,我希望看到城市名称。当我这样做时,我从 API 收到了数据,但无法在屏幕上呈现它,而我可以在控制台中记录它。
为此,我使用了三个单独的文件。 App.js、Form.js 用于提交条款,weather.js 用于 API 配置。
我猜我需要映射接收到的数据但还没有成功。
class App extends React.Component {
state = {
city: null,
}
getWeather = async city => {
const response = await weather.get('/forecast', {
params: {
q: city
}
});
this.setState({
city: response.name,
})
console.log(city); <--- This works
}
render() {
return (
<div>
<Form loadWeather={this.getWeather} />
<p>{this.state.city}</p> <--- This doesn't work
</div>
);
}
}
class Form extends React.Component {
state = { term: '' };
onFormSubmit = (event) => {
event.preventDefault();
this.props.loadWeather(this.state.term);
this.refs.textInput.value = '';
}
render() {
return (
<div>
<form onSubmit={this.onFormSubmit}>
<input
ref="textInput"
type="text"
value={this.state.term}
onChange={event => this.setState({term: event.target.value})}
/>
<button>Get Weather</button>
</form>
</div>
);
}
}
export default Form;
我打算将 {this.state.name} 作为 prop 传递给子组件,但到目前为止,接收到的数据甚至不会出现在该组件上。
【问题讨论】:
-
从哪里调用 getWeather 方法?
-
我做了一个单独的js文件。我将 API 密钥和基本 URL 放入其中,它们工作正常。
-
所以你是从一个单独的文件中调用函数?我不太明白你在说什么。
-
是的,我正在从一个单独的文件中调用“getWeather”函数,以便以后我想制作另一个 API 应用程序时可以重用它。我把
import weather from '../apis/weather';放在App.js的最上面 -
您是否将
getWeather传递给App的某个子组件并从那里调用它?