카테고리 없음

의사코드

해말그미 2023. 4. 3. 22:47
export default function Main() {
  const [condition, setCondition] = useState({
    departure: 'ICN'
  })
  const [flightList, setFlightList] = useState(json)
  const [isloading, setloading] = useState(true)
  // 로딩상태일때를 구현 , 상태를 만들어준다

  const search = ({ departure, destination }) => {
    if (condition.departure !== departure || condition.destination !== destination) {
      console.log('condition 상태를 변경시킵니다')

      // TODO:
      setCondition({departure, destination})
    }
  }

// useEffect로 상태를 변화하는 condition을 FlightDataApi의 getflight로 넘겨준다
  
  useEffect(async() =>{
    setloading(true)
    setFlightList(await getFlight(condition))
    // 필터링 조건인 객체를 인자로 넣어준다 
    setloading(false)
  }, [condition])
  // 검색 조건이 바뀔 때 마다 useEffect 실행
  // useEffect에서 어떤 값이 바뀔때만 호출하고싶다면 배열 안에 
  // useEffect로 관리하고 있는 상태인 condition을 넣어준다

 useEffect 다른풀이
 
 useEffect(() =>{
	setloading(true)
 	getFlight(condition) // local서버가 아닌 진짜서버에서 데이터를 받아온다
   .then(filtered =>{
     setFlightList(filtered)
     setloading(false)
    })
 }, [condition])
  
  
  global.search = search // 실행에는 전혀 지장이 없지만, 테스트를 위해 필요한 코드입니다. 이 코드는 지우지 마세요!

  return (
    <div>
      <Head>
        <title>States Airline</title>
        <link rel="icon" href="/favicon.ico" />
      </Head>

      <main>
        <h1>
          여행가고 싶을 땐, States Airline
        </h1>
        <Search onSearch={search}/>
        <div className="table">
          <div className="row-header">
            <div className="col">출발</div>
            <div className="col">도착</div>
            <div className="col">출발 시각</div>
            <div className="col">도착 시각</div>
            <div className="col"></div>
          </div>
          {/* <FlightList list={flightList.filter(filterByCondition)} /> */}
          // getFlight 요청이 다소 느리므로, 
          // 로딩 상태에 따라 LoadingIndicator 컴포넌트를 표시해야 합니다 
          // 컴포넌트 내 필터 함수 `filterByCondition` 대신 삼항연산자 사용 
          {isloading
          ? <LoadingIndicator />
          : <FlightList list ={flightList} />
          }
        </div>

        <div className="debug-area">
          <Debug condition={condition} />
        </div>
      </main>
    </div>
  )
}