我使用MySQL的数据库,用Axios和useEffect获取数据,然后用一个prop将数据库数据传递给一个组件,如下所示:
const Component = () => {
//DB
const urlProxy = "/api/cities";
//Hooks
const [data, setData] = useState([]);
//DB Fetch
const fetchData = async () => {
await axios
.get(urlProxy)
.then((res) => {
setData(res.data);
})
.catch((err) => {
console.log(err);
});
};
useEffect(() => {
return () => {
fetchData();
};
}, []);
return (
<>
<h1>Cities</h1>
<Cities api={data} />
</>
);
};
在Cities组件内部,我想创建一个算法来操作这些数据,但我得到了一个空数组(来自const [data,setData] = useState([])。过了一会儿,我从数据库中获得了获取的数据。
const Cities = (api) => {
console.log(data) // First Print: [{api:Array(0)}] then [{api:Array(2)}]
return(
<>
...
</>
)
}
所以如果它一开始输出一个空数组我会得到一个错误
我想使用useTimeout(),但我不知道是否有更好的解决方案,以便在获取数据后使用数据。
1条答案
按热度按时间olhwl3o21#
您所需要做的就是在将数据设置为您的状态之前对其进行操作
而等待的最好方法是设置一个loading状态,等待数据被拉取,然后让useEffect对其进行操作。
像这样的东西应该对你有用