【发布时间】:2022-01-14 07:24:52
【问题描述】:
我正在从后端获取一些数据,并且在获取数据时没有任何错误,但问题是在获取数据之前,HTML 部分正在加载,这就是数据未显示在页面上的原因。 这可能是一个简单的问题,但作为一个初学者,我不知道如何解决。
import React from "react";
import styled from "styled-components";
import HospitalCard from "../components/HospitalCard";
import SearchBar from "../components/SearchBar";
import { useState } from "react";
import { useEffect } from "react";
import axios from "axios";
const Container = styled.div`
display: flex;
justify-content: space-between;
align-items: center;
flex-direction: row;
flex-wrap: wrap;
padding: 2vh 5vw;
margin: auto;
`;
function Home() {
const nothing = <div>Nothing to show</div>;
const [data, setData] = useState([]);
const [Hospitals, setHospitals] = useState([]);
const [filtered, setFiltered] = useState(false);
const [searchItem, setSearchItem] = useState("");
const getSearchValue = (e) => {
setSearchItem(e);
};
useEffect(() => {
let isMount = true;
axios.get("http://localhost:4000/search").then((response) => {
if (isMount) {
const hdata = response.data;
setHospitals(hdata);
console.log(hdata);
console.log(Hospitals);
}
});
return () => {
isMount = false;
};
}, []);
useEffect(() => {
setFiltered(true);
var filteredHospitals = Hospitals.filter(function (el) {
console.log(el.city);
return (
el.city.toLowerCase().includes(searchItem.toLowerCase().trim()) ||
el.hospitalname
.toLowerCase()
.trim()
.includes(searchItem.toLowerCase().trim()) ||
el.state.toLowerCase().includes(searchItem.toLowerCase().trim())
);
});
setData(filteredHospitals);
}, [searchItem]);
console.log(Hospitals);
return (
<div>
<SearchBar style={{ margin: "auto" }} getSearchValue={getSearchValue} />
<Container>
{filtered
? data
? data.map((hospital) => {
return (
<HospitalCard
key={hospital.mobilenumber}
hospital={hospital}
/>
);
})
: nothing
: Hospitals.map((hospital) => {
return (
<HospitalCard key={hospital.mobilenumber} hospital={hospital} />
);
})}
</Container>
</div>
);
}
export default Home;
【问题讨论】:
-
在返回 JSX 之前记录
filtered、data的值
标签: javascript reactjs