Algolia 搜索结果不更新,是不是我用错了 instantsearch.js?
我用 Algolia 的 instantsearch.js 做了个搜索框,但改了 query 后页面结果完全没变,控制台也没报错,是不是哪里初始化错了?
我试过重新调用 search.refresh(),也检查了 API key 和 indexName,都没问题。下面是我初始化的代码:
const search = instantsearch({
indexName: 'products',
searchClient: algoliasearch('APP_ID', 'SEARCH_KEY'),
});
search.addWidgets([
instantsearch.widgets.searchBox({ container: '#search-box' }),
instantsearch.widgets.hits({ container: '#hits' })
]);
search.start();
先说最常见的一个坑,instantsearch 的
searchBoxwidget 会自动在#search-box容器里创建一个元素。如果你在 HTML 里自己写了一个 input,就会出现两个输入框,你操作的那个其实并没有绑定到 instantsearch 实例上,所以输入啥都没反应。检查一下你的 HTML,正确的结构应该是这样:
容器里面留空就行,让 widget 自己去渲染。如果你非要用自己的 input 样式,那得用
connectSearchBox自己封装一个 widget,文档里有详细说明。另外一个可能的坑是 DOM 还没加载完就执行了 JS。确保你的脚本放在 body 底部,或者用
DOMContentLoaded包一下:再补充一点,你说改了 query 结果没变,如果是指手动改了 input 的 value 属性,那肯定不会触发搜索。instantsearch 监听的是用户输入事件,不是 value 的变化。想程序化修改 query 的话,要用
search.setUiState()方法。打开浏览器开发者工具,看 Network 面板里有没有发出请求到 Algolia 的 API。如果输入时压根没请求,那就是 widget 没正确绑定;如果有请求但返回数据不对,那可能是 index 配置或者 facets 的问题。