我正在尝试为我的产品 CRUD 实现一个简单的搜索算法。我想这样做的方法是在搜索栏中输入输入,每次用户更改输入时,与搜索匹配的产品都会立即出现,而无需点击搜索按钮。但是,我尝试这样做的方式是这样的:
function filterProducts (productName, productList) {
const queryProducts = productList.filter((prod)=> {
return prod.title === productName;
});
return queryProducts;
}
function HomePage () {
const [productList, setProductList] = useState([]);
const [popupTrigger, setPopupTrigger] = useState('');
const [productDeleteId, setProductDeleteId] = useState('');
const [queryString, setQueryString] = useState('');
let history = useHistory();
useEffect(() => {
if (queryString.trim() === "") {
Axios.get("http://localhost:3001/api/product/get-all").then((data) => {
setProductList(data.data);
});
return;
}
const queryProducts = filterProducts(queryString, productList);
setProductList(queryProducts);
}, [queryString, productList]);
我知道productList
每次渲染都会改变,这可能就是它不起作用的原因。但我不知道如何解决这个问题。我在这里看到了其他问题以及 useReducer 的解决方案,但我似乎没有一个对我有帮助。错误如下:
警告:已超出最大更新深度。当组件在 useEffect 中调用 setState 时会发生这种情况,但 useEffect 要么没有依赖项数组,要么依赖项之一在每次渲染时发生变化。