Я просмотрел каждый ответ бесконечного цикла в SO и не могу понять, что я делаю не так.
Я пытаюсь получить некоторые данные и установить состояние productList с данными, но это вызывает бесконечный цикл.
export default (props) => {
const [productsList, setProductsList] = useState([]);
const getProducts = async () => {
try {
await axios
.get("https://api.stripe.com/v1/skus", {
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${StripeKey}`,
},
})
.then(({ data }) => {
setProductsList(data.data);
});
} catch {
(error) => {
console.log(error);
};
}
};
useEffect(() => {
getProducts();
}, [productList]);
return (
<ProductsContext.Provider value={{ products: productsList }}>
{props.children}
</ProductsContext.Provider>
);
};
Я также пробовал иметь пустой массив в конце useEffect, что заставляет его вообще не устанавливать состояние.
Что мне не хватает?
РЕДАКТИРОВАТЬ:
Я удалил try / catch и [productList] из useEffect
import React, { useState, useEffect } from "react";
import axios from "axios";
const StripeKey = "TEST_KEY";
export const ProductsContext = React.createContext({ products: [] });
export default (props) => {
const [productsList, setProductsList] = useState([]);
useEffect(() => {
axios({
method: "get",
url: "https://api.stripe.com/v1/skus",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${StripeKey}`,
},
})
.then((response) => {
setProductsList(response.data.data)
})
.catch((error) => {
console.log(error);
});
}, []);
return (
<ProductsContext.Provider value={{ products: productsList }}>
{props.children}
</ProductsContext.Provider>
);
};