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

ReactJs+Axios调用Yelp API:如何附加经纬度实现位置请求

如何在React中整合Google Geolocation与Yelp API

嘿,很高兴帮你搞定这个!作为React新手,把两个API整合起来确实需要点小技巧,不过别担心,咱们一步步来,把你的经纬度数据顺利传给Yelp API。

第一步:准备Yelp API的认证信息

首先,你需要去Yelp Developer平台申请一个API Key(如果还没弄的话赶紧去搞定)。为了安全,别直接把API Key硬写在代码里,咱们用React的环境变量来存:

  • 在项目根目录创建一个.env文件
  • 里面写:REACT_APP_YELP_API_KEY=你的Yelp API密钥
  • 重启你的React开发服务器,这样环境变量才能生效

第二步:创建Yelp API请求函数

接下来,写一个专门的函数来处理Yelp API请求,把你拿到的经纬度作为参数传进去。Yelp的Business Search API支持直接用latitude和longitude参数定位,比用城市名更准确。这里用原生的fetch(不用额外装包,新手友好):

async function fetchYelpBusinesses(lat, lng) {
  const apiKey = process.env.REACT_APP_YELP_API_KEY;
  // 这里可以调整查询参数,比如term(搜索关键词)、radius(搜索半径,单位米)
  const url = `https://api.yelp.com/v3/businesses/search?latitude=${lat}&longitude=${lng}&term=restaurants&radius=1000`;
  
  try {
    const response = await fetch(url, {
      headers: {
        // Yelp API需要用Bearer认证
        Authorization: `Bearer ${apiKey}`
      }
    });
    
    if (!response.ok) {
      throw new Error(`请求出错,状态码: ${response.status}`);
    }
    
    const data = await response.json();
    // 返回商家列表数据
    return data.businesses;
  } catch (error) {
    console.error('获取Yelp数据失败:', error);
    // 出错时返回空数组,避免页面崩溃
    return [];
  }
}

第三步:在组件中整合两个API

现在把你已经写好的定位代码和上面的Yelp请求函数结合起来。当你成功获取到用户的经纬度后,自动触发Yelp API请求,然后把数据展示出来:

import { useState, useEffect } from 'react';

function NearbyBusinesses() {
  // 存储经纬度状态
  const [userLat, setUserLat] = useState(null);
  const [userLng, setUserLng] = useState(null);
  // 存储Yelp返回的商家数据
  const [businesses, setBusinesses] = useState([]);
  const [isLoading, setIsLoading] = useState(false);

  // 第一步:获取用户经纬度(你已经完成的部分)
  useEffect(() => {
    navigator.geolocation.getCurrentPosition(
      (position) => {
        setUserLat(position.coords.latitude);
        setUserLng(position.coords.longitude);
      },
      (error) => {
        console.error('获取位置信息失败:', error);
      }
    );
  }, []);

  // 第二步:当经纬度更新时,调用Yelp API
  useEffect(() => {
    // 只有当经纬度都存在时才发起请求
    if (userLat && userLng) {
      setIsLoading(true);
      fetchYelpBusinesses(userLat, userLng)
        .then((results) => {
          setBusinesses(results);
          setIsLoading(false);
        });
    }
  }, [userLat, userLng]);

  // 渲染数据
  return (
    <div className="business-container">
      <h2>你附近的商家</h2>
      {isLoading ? (
        <p>正在加载商家数据...</p>
      ) : businesses.length > 0 ? (
        <ul className="business-list">
          {businesses.map((business) => (
            <li key={business.id} className="business-item">
              <h3>{business.name}</h3>
              <p>⭐️ 评分: {business.rating}</p>
              <p>📍 距离: {(business.distance / 1000).toFixed(2)} km</p>
            </li>
          ))}
        </ul>
      ) : (
        <p>没有找到附近的商家</p>
      )}
    </div>
  );
}

export default NearbyBusinesses;

关键注意事项

  • CORS问题:直接在前端调用Yelp API可能会遇到跨域错误。开发阶段可以用浏览器的CORS插件临时解决,但生产环境一定要用自己的后端服务器转发请求(把Yelp API请求放在后端,前端调用自己的后端接口)。
  • API请求限制:Yelp API有请求次数限制,别在开发阶段频繁刷新测试,避免被限流。
  • 参数调整:你可以修改Yelp API的查询参数,比如把term=restaurants改成term=cafes,或者调整radius的值来扩大/缩小搜索范围。

如果还有细节问题,比如处理加载状态、错误提示,或者调整Yelp返回数据的展示,随时问!

内容的提问来源于stack exchange,提问作者Reena Verma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:44:57