【发布时间】:2019-02-25 17:25:12
【问题描述】:
我正在尝试在 React 中创建一个天气应用程序。我想使用onClick 切换应用语言。
这是我目前的代码。
import React, { Component } from "react";
import axios from "axios";
import "./App.css";
class App extends Component {
componentDidMount() {
this.setState({
isLoading: true
});
axios
.get("path to weather api")
.then(res => {
console.log(res.data.data[0]);
const { city_name, temp, weather } = res.data.data[0];
this.setState({
loc: city_name,
temp: temp,
code: weather.code,
isLoading: false
});
this.setState({
desc: this.convertCode(this.state.code)
});
});
}
switchLanguage = () => {
if (this.state.lang === "en") {
this.setState({
lang: "hi",
desc: this.convertCode(this.state.code)
});
} else {
this.setState({
lang: "en",
desc: this.convertCode(this.state.code)
});
}
};
convertCode = givenCode => {
if (this.state.lang === "en") {
if (
givenCode === 200 ||
givenCode === 201 ||
givenCode === 202 ||
givenCode === 230 ||
givenCode === 231 ||
givenCode === 232 ||
givenCode === 233 ||
givenCode === "200" ||
givenCode === "201" ||
givenCode === "202" ||
givenCode === "230" ||
givenCode === "231" ||
givenCode === "232" ||
givenCode === "233"
) {
return "Thunderstorms";
} else if (
givenCode === 300 ||
givenCode === 301 ||
givenCode === 302 ||
givenCode === "300" ||
givenCode === "301" ||
givenCode === "302"
) {
return "Drizzle";
}
..............
..............
IF CONDITION FOR THE OTHER LANGUAGE
};
render() {
if (!this.state.isLoading) {
return (
<div className="App">
<div className="container">
<div className="languageSwitcher">
<i className="fa fa-language" onClick={this.switchLanguage} />
</div>
<div className="location">
<i className="fa fa-location-arrow" /> {this.state.loc}
</div>
{this.state.lang === "en" && (
<div className="temperature">It's {this.state.temp} degrees.</div>
)}
{this.state.lang === "hi" && (
<div className="temperature">
तापमान {this.state.temp} डिग्री है।
</div>
)}
<div className="description">{this.state.desc}</div>
</div>
</div>
);
} else {
return <div className="loading">Fetching weather data...</div>;
}
}
}
export default App;
除了div 和className="desc" 之外,一切都有效。 desc 总是落后一个阶段。我的意思是当state.lang 是en 时,它会在hi 中显示文本,反之亦然。
我刚开始学习 React,所以代码很乱。对此感到抱歉。
谢谢。
【问题讨论】:
-
你的意思是你需要点击
onClick两次才能工作? -
@KuchBhi 我认为他的意思是,如果语言是印地语,那么描述是英语,而当语言是英语时,描述是印地语。
-
是的@SivcanSingh 是对的。默认情况下,该应用程序在
en中加载。因此,当我onClick一次时,语言应该更改为hi,除了desc之外的所有元素都会发生这种情况。同样在hi的情况下,所有内容都变为hi,但desc变为en。如果不清楚,我很抱歉。 -
@sequel 检查这个帖子:stackoverflow.com/questions/52433669/…
标签: javascript reactjs weather-api