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

React实现option双字段显示与名称搜索,选中仅返回symbol

解决方案

1. 修改datalist选项,同时展示股票代码和名称

原来的option仅设置了value为股票代码,现在需要在option标签内添加显示文本,同时保留value为股票代码——这样下拉列表会展示代码-名称的组合,且选中后输入框自动填充代码:

<input 
  name="ticker" 
  id="ticker" 
  list="stockSelection" 
  onChange={this.onChange} 
  value={this.state.ticker} 
  className="form-control text-center" 
/>
<datalist id="stockSelection">
  {this.state.country === "United States of America"
    ? USDATA.map(({ symbol, name }) => (
        <option key={symbol} value={symbol}>{`${symbol} - ${name}`}</option>
      ))
    : INDIADATA.map(({ symbol, name }) => (
        <option key={symbol} value={symbol}>{`${symbol} - ${name}`}</option>
      ))
  }
</datalist>

此时用户输入"Ab"时,下拉列表会匹配到包含"Ace"名称的选项,显示ABC - Ace to The Base Camp,选中后输入框自动填充ABC。

2. 处理手动输入名称的转换逻辑

如果用户手动输入了股票名称(比如直接输入"Ace"),需要自动将输入值转换为对应的股票代码,修改onChange函数即可:

onChange = (e) => {
  const inputValue = e.target.value.trim();
  const currentData = this.state.country === "United States of America" ? USDATA : INDIADATA;
  
  // 匹配股票代码或名称(不区分大小写)
  const matchedStock = currentData.find(stock => 
    stock.symbol.toLowerCase() === inputValue.toLowerCase() ||
    stock.name.toLowerCase().includes(inputValue.toLowerCase())
  );

  // 如果找到匹配项,设置输入值为代码;否则保留输入(或根据需求清空)
  this.setState({
    ticker: matchedStock ? matchedStock.symbol : inputValue
  });
};

补充说明

  • 给每个option添加key={symbol},符合React列表渲染规范,避免控制台警告。
  • 搜索匹配采用不区分大小写的逻辑,提升用户体验,用户输入大小写都能找到对应选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:55:18