我有一个简单的搜索组件和 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 复制元素并且永远不会被修改,但是这并没有按预期工作。
任何帮助深表感谢。
收到一只叮咚
相关分类