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

React搜索栏如何实现点击按钮后执行产品筛选功能?

如何让产品搜索筛选在点击按钮后才执行?

目前你的代码在输入框内容变化时会实时更新searchTerm,进而触发筛选逻辑。要改成点击Search按钮才执行筛选,只需调整状态管理逻辑,把「输入框内容」和「实际用于筛选的关键词」分开即可,具体修改步骤如下:

步骤1:新增用于存储筛选关键词的状态

在现有状态定义后,添加一个新的状态变量,专门保存点击按钮后确定的筛选关键词:

const [searchTerm, setSearchTerm] = useState("");
const [product, setProduct] = useState([]); 
// 新增状态:存储最终用于筛选的关键词
const [filteredSearchTerm, setFilteredSearchTerm] = useState("");

步骤2:修改筛选逻辑的判断条件

把原来筛选时用到的searchTerm替换成新的filteredSearchTerm,这样只有当点击按钮更新这个状态时,才会触发筛选:

const displayProduct = product
  .filter((product) => {
    if (filteredSearchTerm === "")
      return product;
    else if (product.productName.replaceAll(/\s/g,'').toLowerCase().includes(filteredSearchTerm.toLowerCase().replaceAll(/\s/g,'')))
      return product;
  })
  // 后续slice、map逻辑保持不变
  .slice(pagesVisited,pagesVisited + productPerPage)
  .map(product => {
    return(
      <div className='imageContainer ' key={product.id}>
          <img src={PopularOne} className="image"/>
          <div className='productName'>
          <Link style={{ textDecoration:'none' }} to="/productsDetails" state={{ product:product }}>{product.productName}</Link>
          </div>
          <div className='productPrice'>
          <h3 >RM{product.productPrice}</h3>
          </div>
      </div>   
    )
  })

步骤3:给Search按钮添加点击事件

点击按钮时,把当前输入框的searchTerm赋值给filteredSearchTerm,触发筛选:

<div>
  <input className='filterInput' onChange={event => {
    setSearchTerm(event.target.value)
  }}></input>
  <button className='filterSearchButton' onClick={() => {
    setFilteredSearchTerm(searchTerm);
  }}>Search</button>
</div>

额外优化(可选)

如果需要支持按回车键触发搜索,可以给输入框添加onKeyDown事件:

<input 
  className='filterInput' 
  onChange={event => setSearchTerm(event.target.value)}
  onKeyDown={(e) => {
    if (e.key === 'Enter') {
      setFilteredSearchTerm(searchTerm);
    }
  }}
></input>

这样修改后,输入框只会实时更新自身内容,只有点击Search按钮(或按回车)时才会执行筛选逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:20:39