javascript - 搜索结果使用reactjs突出显示结果

标签 javascript reactjs

我试图获得像 YouTube 这样的搜索结果。只是尝试,但我遇到了一些问题。我已经在codesandbox here 中制作了工作应用程序.

我有一个搜索框,当您输入任何内容时,它会显示搜索结果,例如下拉菜单,例如,当您在 YouTube 中搜索时,您将能够看到下面的结果,同样的事情/

我面临的问题是:

假设我输入“a”,现在您将能够在滚动的搜索结果 div 中看到总共 6 个结果。

1) 因此第一个结果本身将显示突出显示的 css。当我悬停或使用按键导航时,只有高亮CSS应该出现,我怎样才能实现这一点。

2) 所以现在如果我将鼠标悬停在第二个或结果突出显示 css 将显示在第二个或第三个结果中,但第一个结果也会显示 css。我只想要一次只有一个高亮CSS。 (YouTube 搜索中也有相同的功能)

3)现在只有三个元素可见,剩下的三个元素需要滚动,当我通过箭头键导航时,滚动没有发生,我怎样才能用 scrollIntoView 实现这一点? API

4)在 6 个结果中,搜索字符串是“a”,我怎样才能使该字符串变得强大,使其保持突出显示,这样无论您搜索什么,它都应该突出显示

感谢任何帮助!如果您有任何疑问,请告诉我

最佳答案

考虑到我们在此沙箱中更新的代码:https://codesandbox.io/s/react-codesandbox-5fvk9

您真正需要的是一个 onMouseEnter() 事件处理程序来让一切正常工作。

处理程序

  handleMouseEnter = index => {
    this.setState({
      cursor: index,
    })
  }

标记

{searchResults.map((item, index) => {
     return (
         <li
            ref={ref => (this.itemRefs[index] = ref)}
            onClick={() => this.goToItem(index)}
            className={cursor === index ? 'active' : null}
            onMouseEnter={() => this.handleMouseEnter(index)}
         >
          <label className="first-lb">{item.id}</label>
          <label className="second-lb">{item.name}</label>
          <label className="third-lb">{item.address}</label>
        </li>
     )
})}

这样,一次只有悬停或向下箭头/向上箭头之一生效。因此只有一个列表项会突出显示。

关于javascript - 搜索结果使用reactjs突出显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56916802/

相关文章:

javascript - D3 添加缩放和平移到 map

javascript - 宜家风格灯箱

reactjs - 将函数传递给子组件

javascript - 虚拟 DOM 和 ReactDOM 有什么区别?

reactjs - 什么是扁平 bundle ?为什么 Rollup 在这方面比 Webpack 更好?

javascript - 来自 webapp 的 Facebook 分享对话框深度链接

javascript - 如果有人使用 jquery 选择美国,则需要更多输入

javascript - +0和-0一样吗?

javascript - 类名没有出现 React

reactjs - Chrome DevTools 未显示正确的文件名