RESTful api필터링export async function getFlight(filterBy = {}) {
let url = 'http://ec2-13-124-90-231.ap-northeast-2.compute.amazonaws.com:81/flight?'
if (filterBy.departure) url += `departure=${filterBy.departure}`
if (filterBy.destination) url += `&destination=${filterBy.destination}`
const response = fetch(url).then((res) => res.json())
return response;
}
useEffectuseEffect(한번만 실행할 함수 코드, [지켜볼 state]) useEffect(() => {
setLoading(true);
getFlight(condition).then((res) => {
setFlightList(res);
setTimeout(() => { //로딩화면을 보기 위해 임의로 비동기 처리를 했다.
setLoading(false);
}, 300);
});
}, [condition])
로딩 화면
상태 끌어올리기유저의 항공편 검색 결과는 Main.js파일의 condition state가 가지고 있다.
export default function Main() {
// 항공편 검색 조건을 담고 있는 상태
const [condition, setCondition] = useState({});
...}
condition state는 search 함수가 실행되면 변경되는데, search 함수는 Search 컴포넌트에 props로 보내어 해당 컴포넌트에서 실행된다.
// Main.js
const search = ({ departure, destination }) => {
if (
condition.departure !== departure ||
condition.destination !== destination
); {
setCondition({ departure, destination });
};
};
// <Search />
// 상태함수를 props로 받음
function Search({ onSearch }) {
const [textDeparture, setTextDeparture] = useState('');
const [textDestination, setTextDestination] = useState('');
const handleSearchClick = () => {
onSearch({ departure: textDeparture, destination: textDestination })};
...}