Компонент React не обновляется

#reactjs

Вопрос:

У меня возникла проблема, из-за которой моя страница не обновляется при вызове функции обновления, которую я передал.

 function ProductsPage(props) {  const [products, setProduct] = useState([])  const [shouldRefresh, setRefresh] = useState(false)   function refreshProducts() {  setRefresh(!shouldRefresh)  }   const token = localStorage.getItem("token")  const headers = { Authorization: "Token "   token }   useMemo(() =gt; (axios.get("/products", { headers: headers }).then((resp) =gt; (  setProduct(resp.data)  ))  ), shouldRefresh)   return (  lt;Box className="cardDeck"gt;  lt;Redirect_if_not_logged_in /gt;  {products.map((product) =gt; (  lt;InfoCard product={product} refresh={refreshProducts}gt;lt;/InfoCardgt;  )).reverse()}  lt;/Boxgt;  ) }  

Всякий раз, когда я звоню props.refresh() с инфокарты, ничего не происходит.

Ответ №1:

Вам нужно будет использовать крючок useEffect вместо useMemo

 function ProductsPage(props) {  const [products, setProduct] = useState([]);  const [shouldRefresh, setRefresh] = useState(false);   function refreshProducts() {  setRefresh(!shouldRefresh);  }   const token = localStorage.getItem("token");  const headers = {  Authorization: "Token "   token,  };   useEffect(() =gt; {  axios  .get("/products", {  headers: headers,  })  .then((resp) =gt; setProduct(resp.data));  }, [shouldRefresh]);   return (  lt;Box className="cardDeck"gt;  lt;Redirect_if_not_logged_in /gt;  {products  .map((product) =gt; (  lt;InfoCard product={product} refresh={refreshProducts}gt;lt;/InfoCardgt;  ))  .reverse()}  lt;/Boxgt;  ); }  

Ответ №2:

shouldRefresh в useMemo должен находиться в массиве зависимостей, подобном этому:

 useMemo(() =gt; (axios.get("/products", { headers: headers }).then((resp) =gt; (  setProduct(resp.data) )) ), [shouldRefresh])  

Также я не думаю, что вам нужно использовать здесь, useEffect сделает то же самое