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

React搜索栏Search bar无法显示搜索结果问题排查

代码问题汇总
  • 缺少核心依赖导入:使用了useState、StrictMode但未从React包引入,运行直接报引用错误。
  • 数据拉取逻辑时序错误:每次点击搜索才触发商品API请求,且fetch是异步操作,调用allproducts()后立刻遍历AllProducts时,state还未完成更新,拿到的始终是初始空数组。正确逻辑是组件首次挂载时就拉取全量商品存入state,搜索时直接遍历本地已存的全量数据即可,无需重复请求接口。
  • 搜索匹配逻辑完全错误:Searchquery in prod的作用是判断搜索字符串是否为商品对象的属性名,而非判断商品内容是否包含搜索关键词,无法实现内容匹配效果。
  • 搜索结果未做响应式管理:resultfoundarray是普通局部变量,修改后不会触发组件重渲染,哪怕数组内容更新,页面也不会同步展示结果,需要改用state存储搜索结果。
  • JSX存在多处语法错误:
    • input标签的onChange回调缺少闭合括号,代码无法正常编译
    • 数组map渲染option节点时,用花括号包裹返回内容但未写return,实际不会渲染任何选项
    • select标签、多层div标签未正常闭合,标签层级结构不匹配
  • 命名不规范:React中变量、state统一使用小驼峰命名,大驼峰仅用于组件名,Searchquery、AllProducts这类命名容易引发识别混淆。
修正后可运行代码
import Head from "next/head";
import { useState, useEffect, StrictMode } from "react";

const App = () => {
  const [searchQuery, setSearchQuery] = useState("");
  const [allProducts, setAllProducts] = useState([]);
  const [resultFoundArray, setResultFoundArray] = useState([]);

  // 组件首次挂载时拉取全量商品
  useEffect(() => {
    fetch('https://fakestoreapi.com/products')
      .then(res => res.json())
      .then(json => {
        setAllProducts(json);
      })
  }, []);

  const handleSearch = () => {
    if (!searchQuery.trim()) {
      setResultFoundArray([]);
      return;
    }
    // 匹配商品标题(大小写不敏感)
    const matched = allProducts
      .filter(prod => prod.title.toLowerCase().includes(searchQuery.toLowerCase()))
      .map(prod => prod.title);
    setResultFoundArray(matched);
  }

  return (
    <>
      <StrictMode>
        <Head>
          <link rel="stylesheet" href="./css/general.css" />
        </Head>
        <div>
          <div className="searchbardiv">
            <div>
              <input 
                type="text" 
                placeholder="Search" 
                onChange={e => setSearchQuery(e.target.value)} 
              />
              <span>
                <button type="submit" onClick={e => handleSearch()}>Search</button>
              </span>
              <div>
                <select>
                  {resultFoundArray.map((prodTitle, index) => {
                    return <option key={index}>{prodTitle}</option>
                  })}
                </select>
              </div>
            </div>
          </div>
        </div>
      </StrictMode>
    </>
  )
}

export default App;
修正点说明
  • 补全了React相关API的导入
  • 用useEffect在组件初始化时拉取全量商品,避免搜索时重复请求、异步时序问题
  • 把搜索结果改为state存储,更新后自动触发页面重渲染
  • 修正匹配逻辑:通过includes判断商品标题是否包含搜索关键词,统一转小写实现大小写不敏感匹配
  • 修复了所有JSX语法错误,给列表渲染的option加了key属性避免控制台警告
  • 统一了变量、函数的小驼峰命名规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:09:15