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
相关产品推荐
相关产品推荐

