我正在try 获取一个农场的天气数据和经纬度坐标.我已经成功地将场数据从Api获取到了一个Reaction组件.现在我想用它的坐标来获取农场的天气数据.我用的是openweathermap

但问题是,我一直收到这个错误:GET http://api.openweathermap.org/data/2.5/weather?lat=undefined&lon=undefined&appid=[API]&units=metric 400 (Bad Request)

快来人帮帮忙

以下是场组件

import React, { useState, useEffect } from "react";
import { Link, useNavigate, useParams } from "react-router-dom";
import Menubar from "../../components/menubar/Menubar";
import Skeleton from "react-loading-skeleton";
import toast, { Toaster } from 'react-hot-toast';
import axios from 'axios';

import { LazyLoadImage } from "react-lazy-load-image-component";
import Weather from "../../components/weather/Weather";
import FarmWeather from "../../components/weather/FarmWeather";


function FarmDetails() {
    let navigate = useNavigate();
    const [farm, setFarm] = useState('');
    const { username } = useParams();
    const { farmId } = useParams();
    const [isLoading, setIsLoading] = useState(true);

    useEffect(() => {

        let isMounted = true;

        axios.get(`/api/farm/${username}/${farmId}`).then(res => {
            if (isMounted) {
                if (res.data.status === 200) {
                    setFarm(res.data.farm);
                    setIsLoading(false);
                    console.warn(res.data.farm)
                }
                else if (res.data.status === 404) {
                    navigate('/');
                    toast.error(res.data.message, "error");
                }
            }

        });

        return () => {
            isMounted = false
        };
    }, []);


    return (
        <div>
            <Menubar />
            <div className="appHeader bg-primary text-light">
                <div className="left">
                    <a onClick={() => navigate(-1)} className="headerButton goBack">
                        <i className="fi fi-rr-angle-left"></i> </a>
                </div>
                <div className="pageTitle">{farm.farmname}</div>
                <div className="right"></div>
            </div>
            <div id="appCapsule">
                <div className="section mt-3 mb-3">
                    <div className="card">
                        <div className="card-header">
                            Discover
                        </div>
                        <div className="card-body">
                            <h5 className="card-title">Farm Supplies</h5>
                            <p className="card-text">Order for farm supplies suitable for your farm and grow healthy fruits</p>
                            <a href="shop.php" className="btn btn-primary spinner-btn">Go to Shop</a>
                        </div>

                    </div>

                </div>

                <FarmWeather farm={farm} />

                <div className="section mt-3 mb-3">
                    <div className="row">
                        <div className="col-6">

                            <div className="card card-normal">
                                <div className="card-body">
                                    <h5 className="card-title title-small mb-2">Location</h5>
                                    <div className="card-icon mb-0">
                                        <i className="fi fi-rr-marker"></i>
                                    </div>
                                </div>
                            </div>
                        </div>

                        <div className="col-6">

                            <div className="card card-normal card-add">
                                <a href="farm-fruits.php?view=<?php echo $row['farmid']; ?>">
                                    <div className="card-body">
                                        <h5 className="card-title title-small mb-2">Fruits</h5>
                                        <div className="card-icon mb-0">
                                            <i className="fi fi-rr-apple-whole"></i>
                                        </div>
                                    </div>
                                </a>
                            </div>
                        </div>

                        <div className="col-6">

                            <div className="card card-normal">
                                <div className="card-body">
                                    <h5 className="card-title title-small mb-2">Sales</h5>
                                    <div className="card-icon mb-0">
                                        <i className="fi fi-rr-bolt"></i>
                                    </div>
                                </div>
                            </div>


                        </div>

                        <div className="col-6">

                            <div className="card card-normal">
                                <div className="card-body">
                                    <h5 className="card-title title-small mb-2">Expenses</h5>
                                    <div className="card-icon mb-0">
                                        <i className="fi fi-rr-settings"></i>
                                    </div>
                                </div>
                            </div>


                        </div>

                    </div>
                </div>
            </div>



        </div>
    );
}
export default FarmDetails;

和天气组件

import React, { useState, useEffect } from "react";


const FarmWeather = ({ farm }) => {

    const [weather, setWeather] = useState({});

    useEffect(() => {
        fetch(`//api.openweathermap.org/data/2.5/weather?lat=${farm.latitude}&lon=${farm.longitude}&appid=[API]&units=metric`)
            .then((result) => result.json())
            .then((weather) => {
                setWeather(weather);
            });
    }, []);

    console.warn("result", weather)

    return (
        <div className="section mt-3 mb-3">
            <div className="card text-white bg-primary mb-2">
                <div className="card-header">Weather in <span>{weather.name}</span>
                    <div className="weather-icon">
                        <img src={`http://openweathermap.org/img/w/${weather.weather && weather.weather[0].icon}.png`} alt="weather icon" />
                    </div>
                </div>
                <div className="card-body">
                    <h5 className="card-title">Temp <span>{weather.main && weather.main.temp} &deg;C</span></h5>
                    <p className="card-text">Our Technologies have discovered that the Current Weather around your Farm in {farm.county && farm.county.countyname} is
                        Mostly
                        <span id="description" ></span>
                    </p>
                </div>
            </div>
        </div>
    );
}
export default FarmWeather;

推荐答案

在进行API调用之前,您需要判断是否定义了场,您可以将其作为依赖项.

useEffect(() => {
        if (farm) fetch(`//api.openweathermap.org/data/2.5/weather?lat=${farm.latitude}&lon=${farm.longitude}&appid=[API]&units=metric`)
            .then((result) => result.json())
            .then((weather) => {
                setWeather(weather);
            });
    }, [farm]);

Javascript相关问答推荐

vanillajs-datepicker未设置输入值,日期单击时未触发更改事件

过滤对象数组并动态将属性放入新数组

调用removeEvents不起作用

拖放仅通过 Select 上传

使用javascript将Plotly Expandable Sparkline转换为HighCharter Plot在bslib卡中

切换时排序对象数组,切换不起作用

如何在模块层面提供服务?

在286之后恢复轮询

Next.js服务器端组件请求,如何发送我的cookie token?

类构造函数不能在没有用With Router包装的情况下调用

如何创建返回不带`new`关键字的实例的类

环境值在.js文件/Next.js中不起作用

打字脚本中方括号符号属性访问和拾取实用程序的区别

Jexl to LowerCase()和Replace()

FireBase FiRestore安全规则-嵌套对象的MapDiff

如何在FiRestore中的事务中使用getCountFromServer

如何在Java脚本中并行运行for或任意循环的每次迭代

无法使用Redux异步函数读取未定义的useEffect钩子的属性';map';

浮动标签效果移除时,所需的也被移除

打字脚本中的函数包装键入