У меня есть простой компонент поиска и функция handleSearch:
const { data, loading, error } = useQuery(QUERY_GET_ELEMENTS);
const client = useApolloClient();
<input
onChange={handleSearch}
placeholder="🔎 Search..."
/>
function handleSearch(e) {
const { value } = e.target;
const matchingElements = data.filter(({ name }) =>
name.toLowerCase().includes(value.toLowerCase())
);
client.writeData({
data: {
elements: matchingElements
}
});
}
// rendering the elements looks something like this:
data.elements.map(el => <div>{el.name}</div>
Данные поступают из ловушки useQuery.
Проблема заключается в том, что поиск работает только в одном направлении, как только элементы фильтруются Я теряю первоначальный список. Мне нужно хранить все элементы, которые я могу отфильтровать, и отобразить только отфильтрованные, сохраняя при этом исходный список.
Я использую apollo для управления состоянием и, похоже, это не работает. Моей первой мыслью было использовать client.writeData для дублирования элементов, и это никогда не будет изменено, однако это не сработало, как ожидалось.
Любая помощь очень ценится.