#javascript #reactjs #react-redux #react-hooks #use-effect
Вопрос:
У меня есть код ниже:
function StoryCarousel(props) {
const [ivrDests, setIVRDests] = useState([]);
useEffect(() => {
async function getIVRDests() {
var data = {
"customer-id": customer_id
};
let response = await axios.post(`http://localhost:2000/files/get-ivr-dests`, data)
//let response = await axios.post(`/files/get-files`, data)
setIVRDests(response.data)
}
getIVRDests()
}, []);
return (
<div className="StoryCarousel">
<StoryCarouselItem ivr_dests={ivrDests} options={props.options} />
</div>
);
}
Этот код иногда работает, так как вызов api завершится вовремя, а затем успешно передаст данные дочернему компоненту в качестве поддержки. Однако иногда вызов api не завершен, что означает, что ivr_dests не имеет значения, которое связано с моим дочерним компонентом. Могу ли я в любом случае сделать так, чтобы ivrDests должны быть заполнены перед запуском storycarouselitem?
Спасибо
Ответ №1:
Это должно сработать:
function StoryCarousel(props) {
const [ivrDests, setIVRDests] = useState([]);
useEffect(() => {
async function getIVRDests() {
var data = {
"customer-id": customer_id
};
let response = await axios.post(`http://localhost:2000/files/get-ivr-dests`, data)
//let response = await axios.post(`/files/get-files`, data)
setIVRDests(response.data)
}
getIVRDests()
}, []);
return (
<div className="StoryCarousel">
{ivrDests.length != 0 amp;amp; <StoryCarouselItem ivr_dests={ivrDests} options={props.options} />}
</div>
);
}
Вы также можете использовать пользовательский хук (или получить библиотеку, которая его предоставляет, например https://react-query.tanstack.com/), а затем установите флаг загрузки.