Я использую response-admin и пытаюсь создать фильтр с полем автозаполнения, который будет выполнять запрос при наборе текста и отправлять запрос только тогда, когда длина критерия поиска превышает 2.
В настоящее время я использую shouldRenderSuggestions
внутри моего поля AutocompleteInput
, но при этом все равно отправляются два запроса с пустой строкой в фильтре "псевдоним", это часть кода:
<AutocompleteInput optionText="nickname" shouldRenderSuggestions={(val) => {
return val.trim().length > 2
}}/>
То, чтопроисходит, когда я заполняю первые и вторые буквы, отправляется запрос GET
, но с пустой строкой в поле nickname
,
Например, ввод строки: "abc":
1-й запрос: http://website.loc/clients?filter={"nickname":""}&page=1&perPage=25&range=[0,24]&sort=["id","DESC"]
2-й запрос: http://website.loc/clients?filter={"nickname":""}&page=1&perPage=25&range=[0,24]&sort=["id","DESC"]
3-й запрос: http://website.loc/clients?filter={"nickname":"abc"}&page=1&perPage=25&range=[0,24]&sort=["id","DESC"]
Я хочу избежать отправки первых двух запросов полностью.
Полный код компонента:
const PostPagination = props => (
<Pagination rowsPerPageOptions={[]} {...props} />
);
const PostFilter = (props) => (
<Filter {...props}>
<ReferenceInput label="Client"
source="client_id"
reference="clients"
allowEmpty
filterToQuery={searchText => ({ nickname: searchText })}>
<AutocompleteInput optionText="nickname" shouldRenderSuggestions={(val) => {
return val.trim().length > 2
}}/>
</ReferenceInput>
</Filter>
);
const PostsList = props => {
return (
<List {...props} perPage={15}
pagination={<PostPagination/>}
filters={<PostFilter/>}
exporter={false}>
<Datagrid>
<TextField source="nickname" sortable={false}/>
<DateField label="Created" source="created_at" showTime/>
</Datagrid>
</List>
);
};
Редактировать: тот же вопрос касается полей "поиск по мере ввода", таких как <TextInput>
внутриполе <<code>Filter>, я начал задавать новый вопрос, но понял, что это будет своего рода дубликат,
Это код, который также отправляет запросы, начиная с 1 символа, в этом случае даже нет опции shouldRenderSuggestions
, чтобы заставить отправлять пустые запросы
const ClientFilter = (props) => (
<Filter {...props}>
<TextInput label="Search" source="str" alwaysOn/>
</Filter>
);
Живой пример кода в codesandbox.io