当前位置: 首页 > ds >正文

React 中实现获取未来5天的天气预报

最近项目中开发大屏,大屏里面有一个模块是获取某地未来5天的天气预报,如下图:

 一、引入相关依赖

其中天气图标安装 npm install qweather-icons。

可以去对应官网看一下:下载和安装 | 和风天气图标

import React,{ useState ,useEffect,useRef} from 'react';
import 'qweather-icons/font/qweather-icons.css';
import * as echarts from 'echarts';
import locationIcon from '../img/locationIcon.png';

二、创建对应state,用来存储天气数据

        并创建对应方法,请求数据

const [weatherList5, setWeatherList5] = useState([]);useEffect(() => {getWeatherData5();},[])

三、获取到的数据方法

function getWeatherData5(){let url ='https://devapi.qweather.com/v7/weather/7d?location=122.36,41.29&key=d548b08010dd486f91a3e801ba24021f';fetch(url).then((response) => response.json()).then((data) => {if (data.code === '200') {const weather = data.daily.splice(0, 5);setWeatherList5(weather);}}).catch((error) => {console.error('Error fetching weather data:', error);});}

四、天气数据格式如下

五、日期转化星期和日期格式转化

// 星期转化function getDayOfWeek(date){const daysOfWeek = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];const dateObj = new Date(date);const today = new Date();// 比较年、月、日是否相同const isToday =dateObj.getFullYear() === today.getFullYear() &&dateObj.getMonth() === today.getMonth() &&dateObj.getDate() === today.getDate();if (isToday) {return '今天';} else {return daysOfWeek[dateObj.getDay()];}};// 日期格式转化function formatFxDate(date) {const dateObj = new Date(date);const month = String(dateObj.getMonth() + 1).padStart(2, '0');const day = String(dateObj.getDate()).padStart(2, '0');return `${month}/${day}`;};

六、结构部分代码

<div className="screen_body_right_tianqi_states"><div className="screen_body_right_tianqi_states_name"><div className="screen_body_right_tianqi_states_names">未来5日天气预报</div><div className="screen_body_right_tianqi_states_location"><img className="screen_body_right_tianqi_states_location_img" src={locationIcon}/><div className="screen_body_right_tianqi_states_location_name">辽宁/黑山县</div></div></div><div className="screen_body_right_tianqi_states_list">{weatherList5.map((item,index)=>{return (<div className="screen_body_right_tianqi_states_list_item" key={index}><div className="screen_body_right_tianqi_states_list_item_top"><div className="screen_body_right_tianqi_states_list_item_top_day">{getDayOfWeek(item.fxDate)}</div><div className="screen_body_right_tianqi_states_list_item_top_date">{formatFxDate(item.fxDate)}</div></div><div className="screen_body_right_tianqi_states_list_item_center"><div className="screen_body_right_tianqi_states_list_item_center_max">{item.tempMax}°</div><div style={{height:`${(item.tempMax-item.tempMin)*5}px`}} className="screen_body_right_tianqi_states_list_item_center_column"></div><div className="screen_body_right_tianqi_states_list_item_center_min">{item.tempMin}°</div></div><div className="screen_body_right_tianqi_states_list_item_footer"><i className={`qweather-icons qi-${item.iconDay}-fill`} style={{ fontSize: '20px',color:'#02DFFB'}}></i><div className="screen_body_right_tianqi_states_list_item_footer_textDay">{item.textDay}</div></div></div>)})}</div></div>

七、全部代码如下

import React,{ useState ,useEffect,useRef} from 'react';
import 'qweather-icons/font/qweather-icons.css';
import * as echarts from 'echarts';
import locationIcon from '../img/locationIcon.png';const ScreenBodyRight = () => {const [weatherList5, setWeatherList5] = useState([]);useEffect(() => {getWeatherData5();},[])function getWeatherData5(){let url ='https://devapi.qweather.com/v7/weather/7d?location=122.36,41.29&key=d548b08010dd486f91a3e801ba24021f';fetch(url).then((response) => response.json()).then((data) => {if (data.code === '200') {const weather = data.daily.splice(0, 5);setWeatherList5(weather);}}).catch((error) => {console.error('Error fetching weather data:', error);});}// 时间转化function getDayOfWeek(date){const daysOfWeek = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];const dateObj = new Date(date);const today = new Date();// 比较年、月、日是否相同const isToday =dateObj.getFullYear() === today.getFullYear() &&dateObj.getMonth() === today.getMonth() &&dateObj.getDate() === today.getDate();if (isToday) {return '今天';} else {return daysOfWeek[dateObj.getDay()];}};// 时间格式转化function formatFxDate(date) {const dateObj = new Date(date);const month = String(dateObj.getMonth() + 1).padStart(2, '0');const day = String(dateObj.getDate()).padStart(2, '0');return `${month}/${day}`;};return (<><div className="screen_body_right">{/*天气预报*/}<div className="screen_body_right_tianqi_states"><div className="screen_body_right_tianqi_states_name"><div className="screen_body_right_tianqi_states_names">未来5日天气预报</div><div className="screen_body_right_tianqi_states_location"><img className="screen_body_right_tianqi_states_location_img" src={locationIcon}/><div className="screen_body_right_tianqi_states_location_name">辽宁/黑山县</div></div></div><div className="screen_body_right_tianqi_states_list">{weatherList5.map((item,index)=>{return (<div className="screen_body_right_tianqi_states_list_item" key={index}><div className="screen_body_right_tianqi_states_list_item_top"><div className="screen_body_right_tianqi_states_list_item_top_day">{getDayOfWeek(item.fxDate)}</div><div className="screen_body_right_tianqi_states_list_item_top_date">{formatFxDate(item.fxDate)}</div></div><div className="screen_body_right_tianqi_states_list_item_center"><div className="screen_body_right_tianqi_states_list_item_center_max">{item.tempMax}°</div><div style={{height:`${(item.tempMax-item.tempMin)*5}px`}} className="screen_body_right_tianqi_states_list_item_center_column"></div><div className="screen_body_right_tianqi_states_list_item_center_min">{item.tempMin}°</div></div><div className="screen_body_right_tianqi_states_list_item_footer"><i className={`qweather-icons qi-${item.iconDay}-fill`} style={{ fontSize: '20px',color:'#02DFFB'}}></i><div className="screen_body_right_tianqi_states_list_item_footer_textDay">{item.textDay}</div></div></div>)})}</div></div></div></>)
}export default ScreenBodyRight

八、css代码:

.screen_body_right_tianqi_states_list_item_center_column{width: 7px;height: 50px;max-height: 50px;background: linear-gradient(180deg, #02DFFB 0%, #2B8EF3 100%);border-radius: 4px;margin: 8px 0px;
}

http://www.xdnf.cn/news/14674.html

相关文章:

  • FPGA基础 -- Verilog语言要素之标识符
  • 同态加密类型详解:部分同态加密,全同态加密
  • 在 CEP插件界面 打开网页 简单方法
  • 使用 Tailwind CSS 进行样式设计,并与 Next.js 和 TypeScript 无缝集成
  • Vue-Router笔记
  • Linux基本指令
  • 【计算机常识:Windows】--CMD命令详解
  • 我们感知的世界,只是冰山一角?
  • 输入数量未知如何设置输入
  • 安装 WSL2 与设置​
  • 函数重载与函数模板
  • 电阻篇---上拉电阻
  • JavaScript 精度问题深度解析
  • LeetCode--30.串联所有单词的子串
  • LLM4rec-rednote
  • YOLOv4 训练与推理流程详解
  • 105. Java 继承 - 静态方法的隐藏
  • 工作中使用到的单词(软件开发)_第四版
  • 修改了xml布局代码,页面使用了databinding,此时不开启kapt也可以吗
  • firewalld防火墙(一):基础概念、配置详解与实战应用
  • PaddleOCR项目实战(3):SpringBoot服务开发之全局异常处理
  • 华为OD-2024年E卷-增强的strstr[100分] -- python
  • OC-UI学习-Auto Layout使用
  • 自主学习-《Absolute Zero: Reinforced Self-play Reasoning with Zero Data》
  • 《贵州安顺棒垒球》国家队运动员·棒球1号位
  • 器件(九)—对设计的模块进行双脉冲仿真
  • 【系统分析师】2011年真题:案例分析-答案及详解
  • 阿里云OSS任意文件写入/删除漏洞修复方案
  • LDPC码的译码算法
  • 一个包含两款主题的社交APP客户端UI解决方案