代码沙盒链接
对于问题的第一部分,您可以onNoResults
在任何结果组件上使用 prop 在未找到结果时呈现自定义 JSX。从文档:
onNoResults字符串或 JSX [可选]
未找到结果时显示自定义消息或组件。
<ResultList
...
// custom JSX when no results are found
onNoResults={
<section>
<input />
<button>Add</button>
</section>
}
/>
对于问题的第二部分,IMO 有两种方法可以解决这个问题。
- 使用ReactiveComponent可以创建自定义的 ReactiveSearch 组件。
- 使用自定义查询
我将解释如何使用customQuery
它来解决此问题,但根据哪种方法最适合您的需求,创建自定义组件可能会更好。
在我分享的示例中,我的DataSearch如下所示:
<DataSearch
title="DataSearch"
dataField={["original_title", "original_title.search"]}
categoryField="authors.raw"
componentId="BookSensor"
customQuery={this.customQuery}
defaultSelected={this.state.value}
onValueSelected={this.updateState}
/>
使用 a 的原因customQuery
是为了完全控制应用哪个查询来检索结果。ReactiveSearch 旨在以反应方式工作。当一个值被设置到 中DataSearch
时,ResultList
会对此变化做出反应。拥有一个customQuery
可以让我们控制针对此更改触发哪个查询。此外,我将值保持DataSearch
在状态中,以便在查询被触发时将其清除。这是我在示例中使用的内容:
customQuery = (value, props) => {
// find the current query using defaultQuery from DataSearch
const currentQuery = DataSearch.defaultQuery(value, props);
// clear the value in component's state
this.setState({
value: ""
});
if (value.length) {
// store this query
this.prevQuery = currentQuery;
return currentQuery;
}
// if the value is empty, that is it was cleared, return the previous query instead
return this.prevQuery;
};
因此,每当清除值时,我只返回上一个查询,以便结果列表显示上一个查询的正确结果(在清除值之前)。
另外为了控制DataSearch
我的组件的值,我使用了defaultSelected
andonValueSelected
道具。它们的工作方式与您在反应中创建受控组件的方式非常相似。文档
同样,如果自定义此流程听起来很复杂,那么使用ReactiveComponent创建自定义组件可能会更好。
使用 customQuery演示此答案