reactjs - 根据 API 响应更改类
问题描述
我想根据 API 的响应将类更改为我的 div 容器。更具体地说,如果 API 返回超过 0 度的温度,我希望背景为红色,如果低于我希望它为蓝色。(稍后将是图像,但现在是颜色。)
我想检查一下celsius={this.state.celsius}
。
更新所有代码
import './App.css';
import React from 'react';
import Header from './components/Header';
import Footer from './components/Footer';
import Search from './components/Search';
import Form from './components/Form';
const API_KEY = '*********************'
class App extends React.Component {
constructor(){
super();
this.state = {
city: undefined,
celsius: undefined,
wind: undefined,
feelsLike: undefined
};
}
evenDeagree(temp){
let cell = Math.floor(temp)
return cell;
}
getWeather = async (e) => {
try {
e.preventDefault();
"city."
const city= e.target.elements.city.value;
datan.
if(city){
const api_call = await fetch(
`https://api.openweathermap.org/data/2.5/weather?q=${city}&units=metric&appid=${API_KEY}`
);
reponse
const response = await api_call.json();
console.log(response)
this.setState({
city: "City: " + `${response.name}`,
celsius: "Current Degree: " + this.evenDeagree(response.main.temp) + "°C",
wind: "Wind m/s: " + this.evenDeagree(response.wind.speed),
feelsLike: "Känns som: " + this.evenDeagree(response.main.feels_like) + "°C"
});
}
}
catch(error) {
document.getElementById("errMessage").innerHTML = "City not found, please try again";
}
}
render(){
return(
<div className="App">
<Header />
<div className="mainContainer">
<Form loadweather={this.getWeather}/>
<div className={this.state.celsius > 0 ? "red" : "blue"}>
<Search
city={this.state.city}
celsius={this.state.celsius}
wind={this.state.wind}
feelsLike={this.state.feelsLike}
/>
</div>
</div>
<Footer />
</div>
);
}
}
解决方案
您可以通过多种方式实现这一点,在 useState 的帮助下,您可以使用默认类设置状态并使用网络请求完成更新类。
或者,如果您的条件不满足,您可以使用 css modulse 并添加一个类数组并加入另一个类等。
下面是一个示例,可帮助您了解如何动态传递类名。
代码沙箱 => https://codesandbox.io/s/exciting-gagarin-ugy7d?file=/src/styles.css:0-162
import React, { useEffect, useState } from "react";
import "./styles.css";
const App = () =>
{
const [className, setClassName] = useState("App");
useEffect(() =>
{
//Fake Api Cal
setTimeout(() =>
{
setClassName("App-New");
}, 3000);
}, []);
return (
<div className={className}>
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
export default App;
/*styles.css*/
.App
{
font-family: sans-serif;
text-align: center;
background: green
}
.App-New
{
font-family: sans-serif;
text-align: center;
background: red
}
推荐阅读
- java - 在 JUnit 4 的“gradle test”开始时运行初始化程序
- javascript - JSPDF autotable - 打破大表
- php - PDO 是否仍在为 MySQL 模拟准备好的语句?
- asp.net-mvc - 在视图 MVC 5 上渲染时隐藏输入不起作用
- c++ - 为什么带有type参数的operator()可以在result_of的上下文中应用于type?
- reactjs - 扩展类和更改属性
- python - 如何在 django 项目中调用命令?
- c# - 服务器上传代码按时比较问题
- c# - 如何从 OWIN 启动类中获取 localhost 名称
- node.js - “export MY_VAR=123 && npx package ...”和“MY_VAR=123 npx package ...”有什么区别?