Как обновить state по завершению нескольких сетевых запросов?
Как правильно обновить state за 1 раз после выполнения всех сетевых запросов?
// idList === ["34563", "123423", "2359239"]
const [itemsList, setItemsList] = useState([]);
useEffect(() => {
const updatedItemsList = [];
idList.forEach((id) => {
const item = doSomeFetch(id);
updatedItemsList.push(item)
})
setItemsList(updatedItemsList)
}, [props.idList])
Ожидаемый результат:
- проходимся по массиву с
id - делаем запрос к серверу на каждый
id - получаем объект по его
idи добавляем в массив - по завершению всех запросов полученный массив прокидываем в стейт
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
useEffect(() => {
Promise.all(idList.map((id) => doSomeFetch(id)))
.then((updatedItemsList) => setItemsList(updatedItemsList))
.catch(console.error)
}, [props.idList])
можно даже немного короче
useEffect(() => {
Promise.all(idList.map(doSomeFetch))
.then(setItemsList).catch(console.error)
}, [props.idList])