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

React问题:onClick无法搜索API城市,默认纽约搜索失效

问题原因及解决方案

核心问题:API请求URL格式错误

你的代码存在两个关键的URL参数错误,导致请求无法正确获取目标城市的啤酒厂数据:

  • API_BASE_URL参数结构错误:原URL里的by_city&per_page是无效格式,&是HTML转义字符,需直接用&,且by_city要赋值目标城市、per_page需指定每页数量。
  • 搜索参数名错误:OpenBreweryDB按城市搜索的参数是by_city,而非你代码里的s。

修正后的代码

1. 修正API请求逻辑

import React, {useState, useEffect} from 'react';
import '../styles/searchPage.css'
import SearchCard from '../components/SearchCard';

// 仅保留基础API地址,参数在请求时动态拼接
const API_BASE_URL = 'https://api.openbrewerydb.org/breweries';

function SearchPage() {
  const [cards, setCards] = useState([]);
  const [searchTerm, setSearchTerm] = useState('');
  
  const searchRestaurants = async (city) => {
    // 对城市名做URL编码,处理空格等特殊字符
    const encodedCity = encodeURIComponent(city);
    // 拼接正确参数:by_city指定城市,per_page设置每页数量(可自行调整)
    const req = await fetch(`${API_BASE_URL}?by_city=${encodedCity}&per_page=20`);
    const data = await req.json();
    console.log(data);
    setCards(data);
  };

  useEffect(() => {
    searchRestaurants('new york');
  }, []);

2. 搜索交互部分(修正class为className)

return (  
    <div className='search'>
      <h1>Enter a City or Town name</h1>
      <div className='search-container'>
       <input 
        type="text"
        name="search"
        value={searchTerm}
        onChange={(e) => setSearchTerm(e.target.value)}
        onKeyPress={(e) => {
          if (e.key === 'Enter'){
            searchRestaurants(searchTerm);
          }
        }}
        placeholder="Search..." 
        className="search-input"
        />
        <button 
        className='next'
        onClick={()=> searchRestaurants(searchTerm)}
        >Go</button>
        </div>
      {/* 渲染啤酒厂卡片的逻辑 */}
      <div className="cards-list">
        {cards.map(brewery => (
          <SearchCard key={brewery.id} data={brewery} />
        ))}
      </div>
    </div>
  );
}

export default SearchPage;

额外注意事项

  • React元素的类名需用className替代原生HTML的class,避免控制台警告。
  • 确保SearchCard组件能正确接收并渲染啤酒厂数据,比如使用brewery.name、brewery.city等字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:45:36