【发布时间】:2021-05-18 16:02:38
【问题描述】:
我的 useEffect 中有一个异步请求。我注意到该组件是在 useEffect 完成之前呈现的。
import React, { useEffect } from 'react';
import axios from 'axios';
import './SearchWords.css';
const URL_REQUEST = 'http://myLink.com';
const SearchWords = (props) => {
const { setState } = props;
useEffect(async () => {
const data = {
sentence: props.sentence
};
await axios.post(`${URL_REQUEST}/getData`, { data })
.then((res) => {
setState(state =>({
...state,
search: res.data
}));
})
.catch((err) =>{
console.log(err);
})
}, []);
const render = () => {
if(props.search.length > 0) {
const linkMarkup = props.search.map((link) => (
<li key={link.id} className="link-list-item">
<a
href={link.link}
target="_blank"
rel="noopener noreferrer"
className="link-list-item-url"
onClick
>
{link.name}
</a>
</li>
));
return <ul className="link-list">{linkMarkup}</ul>;
} else {
return <p>No data found for: {props.sentence}</p>
}
}
return render()
}
export default SearchWords;
它正在工作,但它首先显示No data found for: My Search String。然后,它重新加载并显示<ul> 和结果。如何避免首先显示“未找到数据”消息。
谢谢
【问题讨论】:
-
跟踪请求何时通过状态加载。如果请求仍在加载,您可以显示微调器。一旦你得到数据,你就可以显示它。如果没有返回数据,您可以显示“未找到数据”消息。通常,您不希望在发出异步请求时阻止 UI 呈现。加载微调器可以更好地指示最终用户您的应用正在尝试在后台加载数据。
标签: reactjs axios react-hooks