You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS调用openweathermap报wrong latitude,如何获取农场坐标天气?

解决OpenWeatherMap API "wrong latitude" 错误的方案

核心问题分析

  • 拼写错误:代码里的latitute是拼写失误,正确字段名应为latitude,错误拼写会导致传递给API的纬度参数值为undefined。
  • 执行时机问题:第二个useEffect依赖数组为空,会在组件挂载时立即执行,此时farm还是初始空对象,经纬度字段未被赋值,同样会传递无效参数给API。

修正后的代码

function FarmDetails() {
    let navigate = useNavigate();
    const [farm, setFarm] = useState({});
    const [weather, setWeather] = useState({});
    const { username, 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);
                }
                else if (res.data.status === 404) {
                    navigate('/');
                    toast.error(res.data.message, "error");
                }
            }
        }).catch(err => {
            if (isMounted) {
                setIsLoading(false);
                toast.error('获取农场信息失败', "error");
            }
        });

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

    useEffect(() => {
        if (farm.latitude && farm.longitude) {
            fetch(`//api.openweathermap.org/data/2.5/weather?lat=${farm.latitude}&lon=${farm.longitude}&appid=[APIKEY]&units=metric`)
                .then((result) => {
                    if (!result.ok) {
                        throw new Error('天气请求失败');
                    }
                    return result.json();
                })
                .then((weatherData) => {
                    setWeather(weatherData);
                })
                .catch(err => {
                    console.error('获取天气数据出错:', err);
                });
        }
    }, [farm]);

    console.warn("result", weather);

    if (isLoading) {
        return <div>加载中...</div>;
    }
    return (
        <div>
            {/* 这里放农场详情和天气展示的JSX内容 */}
        </div>
    );
}

关键修正点说明

  • 修正拼写错误:将latitute改为latitude,确保能正确读取农场的纬度值。
  • 调整执行时机:第二个useEffect依赖数组改为[farm],农场数据更新后才触发天气API请求;同时增加经纬度存在的判断,避免传递无效参数。
  • 补充依赖数组:第一个useEffect添加username、farmId、navigate作为依赖,符合React Hooks规则,避免闭包问题。
  • 增加错误处理:给axios和fetch添加错误捕获逻辑,方便排查问题并给用户反馈。
  • 补充加载状态渲染:添加加载中提示和基础JSX结构,避免组件报错。

内容的提问来源于stack exchange,提问作者John Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:56:07