我(reactjs新手)不能使用其他人对我的代码的回答,所以。
我想做:
- 不输入任何内容就不会显示结果(命中率)。问题状态:已完成;
- 我想在清除输入搜索(退格)后清除所有结果(命中):未完成;
我可怜的解决方案是在代码第一次运行时尝试将“ let变量noResultsLoad”更改为true,然后将其更改为false。这样可以避免首次加载结果。
但是,如果我键入一些内容并尝试清除输入搜索,结果仍然存在。
我的search.js(仅供参考:TerminalInput = Search):
import React from "react"
import algoliasearch from 'algoliasearch/lite';
import { InstantSearch,SearchBox,Hits,Stats } from "react-instantsearch-dom"
import Hit from "./Hit"
import * as S from "../../styles/components/terminalinput"
const algolia = {
appId: process.env.GATSBY_ALGOLIA_APP_ID,searchOnlyApiKey: process.env.GATSBY_ALGOLIA_SEARCH_KEY,indexName: process.env.GATSBY_ALGOLIA_INDEX_NAME
}
let noResultsLoad = true;
const algoliaClient = algoliasearch(algolia.appId,algolia.searchOnlyApiKey);
// my poor solution,please refactor this
const searchClient = {
search(requests) {
if (noResultsLoad === true) {
noResultsLoad = false;
return;
}
return algoliaClient.search(requests);
},};
const TerminalInput = () => {
return (
<S.TerminalInputWrapper>
<InstantSearch
searchClient={searchClient}
indexName={algolia.indexName}
>
<SearchBox autoFocus translations={{ placeholder: "Pesquisar..." }} />
<Hits hitComponent={Hit} />
<Stats
translations={{
stats(nbHits,timeSpentMs) {
return `${nbHits} resultados encontrados em ${timeSpentMs}ms`
},}}
/>
</InstantSearch>
</S.TerminalInputWrapper>
)
}
export default TerminalInput
我的Hit.js:
import React from "react"
import PostItem from "../PostItem"
const Hit = ({ hit }) => {
const noResults = hit.noResults
if(noResults){
return
}else
return (
<PostItem
slug={hit.fields.slug}
title={hit.title}
date={hit.date}
description={hit.description}
category={hit.category}
/>
)}
export default Hit