【问题标题】:search results highlight results using reactjs搜索结果使用 reactjs 突出显示结果
【发布时间】:2019-07-07 12:19:44
【问题描述】:

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

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

我面临的问题是:

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

1) 所以第一个结果本身将显示突出显示的 css。当我悬停或使用键导航时,只有高亮 css 应该出现,我该如何实现这一点。

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

3) 现在只有三个元素可见,其余三个是您需要滚动的,当我通过箭头键导航时,滚动没有发生我如何使用scrollIntoView API 实现这一点

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

任何帮助表示赞赏!如果您有任何疑问,请告诉我

【问题讨论】:

  • @Tobias 感谢您的编辑。我怎样才能实现上述目标
  • 不清楚你想要达到什么目标!
  • @LefiTarik 你现在可以检查问题吗?我已经用例子更新了它。你能告诉我任何需要的更多细节吗
  • 现在非常清楚,尤其是在@Christopher Ngo 很好的接触之后!
  • 但只是一个通知,作为开发人员,您应该很好地解释您的需求,而不是参考与某些供应商相关的功能,您可以简单地解释您的需求,以便可以帮助的人快速响应。 .

标签: javascript reactjs


【解决方案1】:

考虑到我们在此沙盒中更新的代码: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>
     )
})}

这样,一次只有一个鼠标悬停或向下箭头/向上箭头会生效。所以只有一个列表项会被突出显示。

【讨论】:

  • 好的。谢谢克里斯托弗。让我在沙盒中检查codesandbox.io/s/react-codesandbox-kyd4g 会让你知道是否有任何问题。还有一个疑问。在我的问题沙箱中,li 与功能组件分开。在功能组件中,引用不存在,所以我应该将每个需要使用引用的功能组件更改为类组件。或者我应该怎么做呢
  • 这真的取决于。您是否仍在使用 .map() 来迭代和创建多个该功能组件,或者它只是一个项目?
  • 是的,我正在使用 .map。另一个 hCase 是当我输入“a”并且现在如果我单击向下箭头,我现在将鼠标悬停在第二个结果上,所以第二个和第三个搜索结果突出显示,但它应该是第三个应该突出显示是不是你可以检查这个案例在你的答案代码框中
  • ibb.co/0cnZ5g2看这张图你就能看懂了
  • 啊好吧,看看图片,这很奇怪哈哈。让我尝试找到一个干净的修复程序。同样对于 .map(),只需将您每次返回的组件包装在一个 div 中并将一个引用传递给它。所以喜欢:&lt;div ref={(ref) =&gt; this.myRefs[index] = ref }&gt;&lt;Component/&gt;&lt;/div&gt;
猜你喜欢
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 2015-09-09
  • 2014-03-07
  • 2014-07-25
相关资源
最近更新 更多