1

我已经按照 ReactiveSearch 的教程进行操作,并且我将它与 React 和 Appbase.io 上的托管 Elastic 实例一起使用。

我希望用户看到自动建议,但只能从建议列表中进行选择(因此,如果“foo”不在建议列表中,则不应执行查询)。

这是因为我不想有搜索结果页面,只是为了让应用程序根据所选值立即将您带到正确的页面。

我以为我可以使用strictSelectiononValueSelected来做到这一点,但它仍然允许像“foo”这样的值(这不是自动完成值)通过。

import React, { Component } from "react";
import ReactDOM from "react-dom";

import { ReactiveBase, DataSearch } from "@appbaseio/reactivesearch";

class Main extends Component {
  render() {
    return (
      <div className="flex-col lighter">
        <ReactiveBase
          app="bravos"
          credentials="b8AuX6o06:19f6637f-0a80-48f7-8fe7-9fa0339b7c71"
        >
          <DataSearch
            className=""
            autosuggest={true}
            strictSelection={true}
            componentId="search"
            placeholder="Search Name/Ticker"
            dataField={["symbol", "name"]}
            onValueSelected={value => {
              document.location.href = `./${value}`;
            }}
          />
        </ReactiveBase>
      </div>
    );
  }
}

ReactDOM.render(<Main />, document.getElementById("root"));

Codesandbox 链接:https ://codesandbox.io/embed/wqjpoq25w

4

1 回答 1

0

你几乎得到了它。这里的关键strictSelection是还要检查onValueSelected docs中值选择的原因:

onValueSelectedis called whenever a suggestion is selected or a search is performed by pressing enter key. 如果操作原因是“SUGGESTION_SELECT”,它还会传递操作原因和源对象。可能的原因有:

'SUGGESTION_SELECT'

'ENTER_PRESS'

'CLEAR_VALUE'

此 API 有助于为strictSelection. 以下是检查建议选择的方法:

<DataSearch
  ...
  onValueSelected={(value, cause, source) => {
    if (cause === 'SUGGESTION_SELECT') {
      document.location.href = `./${value}`;
    }
  }}
/>

演示

于 2018-09-11T14:03:39.653 回答