在某些场景下,我们需要对搜索功能进行定制,比如:
面对这些灵活的自定义需求,我们提供了相应的接口,对默认主题的搜索组件进行扩展,让你可以很容易地定制搜索功能。
在 Rspress 配置中,我们提供了 search.searchHooks
配置项,用于配置搜索组件的钩子函数,如下:
search.searchHooks
配置项的值为一个文件路径,这个文件会导出对应的钩子逻辑,如 onSearch
,从而让你可以定制搜索运行时的能力。我们可以称这个文件为 searchHooks
模块。
下面我们来介绍 searchHooks 中的钩子函数,即 beforeSearch
、onSearch
、afterRender
、render
。
在 searchHooks 模块中,你只需要导出你需要的钩子函数,而不是必须导出全部的钩子函数。
beforeSearch
钩子函数会在搜索开始前执行,你可以用来对搜索关键字进行处理,比如去除敏感词,或者对搜索关键字进行打点上报。
该钩子支持异步操作。
使用示例如下:
onSearch
钩子函数会在默认的全文搜索逻辑完成之后执行,你可以在这个钩子函数中对搜索结果进行过滤或者上报,也可以在这个钩子函数中增加自定义的搜索数据源。
该钩子支持异步操作。
使用示例如下:
需要注意的是,onSearch
钩子函数的返回值为一个数组,数组中的每一项为一个搜索源的结果,每一项的结构如下:
其中 result
为搜索结果,你可以自定义内部的结构。如果 renderType 为 RenderType.Default
,则会使用默认的渲染方式进行渲染,如果为 RenderType.Custom
,则会使用 render
钩子函数中的渲染方式进行渲染。
afterSearch
钩子函数会在搜索结果渲染完成之后执行,你可以在这个钩子拿到最终的搜索关键词和搜索结果。
该钩子支持异步操作。
使用示例如下:
render
函数会对你在 onSearch
钩子中自定义的搜索源数据进行渲染,因此一般需要和 onSearch
一起使用。使用方式如下:
效果如下: