종합퀴즈

dev_log·2022년 8월 10일
0

5번

import React, { useState } from "react";

export default function ParentComponent() {
  const [value, setValue] = useState("날 바꿔줘!");

  const handleChangeValue = () => {
    setValue("보여줄게 완전히 달라진 값");
  };

  return (
    <div>
      <div>값은 {value} 입니다</div>
      <ChildComponent 1️⃣{handleBtnClick={handleChangeValue} />
    </div>
  );
}

function ChildComponent(2️⃣{handleBtnClick} ) {
  const handleClick = () => {
    // 이 버튼을 눌러서 부모의 상태를 바꿀 순 없을까?
		3️⃣handleBtnClick() 
  };

  return <button onClick={handleClick}>값 변경</button>;
}

단방향 데이터 흐름이라는 원칙에 따라, 우리는 부모 컴포넌트에서 자식 컴포넌트로 “상태를 변경하는 함수” 그 자체를 하위 컴포넌트에 전달하고 이 함수를 하위 컴포넌트가 실행해야 합니다. 따라서
1번에는 handleChangeValue() 함수를 변수에 담아서 하위 컴포넌트에 보내줘야 합니다. 그 후 하위 컴포넌트에서는 함수를 설정한 변수명으로 받아야 하기 때문에 2번에는 {handleBtnClick} 로 받아와 줘야 합니다. 마지막으로 받아온 함수를 실행하기 위해 3번은 handleBtnClick() 이 됩니다.

6번

function App() {
	const [keyword, setKeyword] = userState("");
	const onChange = (event) => seyKeyword(event.target.value);

	useEffect(() => {
		console.log("나는 업데이트가 될 때마다 작동해")
	}, 1️⃣x) //아무것도 안 들어가 있을 때는 컴포넌트가 처음 생성되거나, props가 업데이트 되거나, state가 업데이트 될 때마다 실행됩니다.

	useEffect(() => {
		console.log("나는 처음만 작동해")
	}, 2️⃣[]) //빈 배열일 때는 컴포넌트가 처음 생성될 때만 함수가 실행됩니다.


	useEffect(() => {
		console.log("나는 keyword가 바뀔 때마다 작동해")
	}, 3️⃣[keyword]) //keyword가 업데이트 될 때마다 실행됩니다.


	return (
		<div>
			<input
				value={keyword}
				onChange={onChange}
				type="text"
				placeholder="검색창..."
			/>
		</div>
	)
}

7번

import LoadingIndicator from './component/LoadingIndicator'

export default function Main() {
  1️⃣const [isLoading, setIsLoading] = useState(false) // loading useState를 만들어 주세요
	//생략, condition State와 flightList State는 구현했음을 가정합니다.

  useEffect(() => {
    2️⃣setIsLoading(true) // 갱신함수를 실행시켜 주세요
		fetch(`http://서버주소/flight?q=${condition}`)
    .then(resp => resp.json())
    .then(result => {
			setFlightList(result)
      3️⃣setIsLoading(false) ;
    });
  }, [condition]) 

//생략, search 컴포넌트와 flightList 컴포넌트는 구현했음을 가정합니다.
  return (
    <div>
      <main>
        <div className="table">
          4️⃣{isLoading ? <LoadingIndicator /> : <div>로딩 완료 화면</div>} // 삼항연산자를 이용하세요
        </div>
      </main>
    </div>
  )
}

첫 화면에서는 로딩 화면 없이 항공편 리스트가 보여져야 하므로 isLoading의 초깃값이 false여야 합니다.
데이터를 받기전 isLoading을 true로 바꿔주어 로딩 화면(Loading indicator)을 보여주고, 데이터를 다 받으면 isLoading이 false가 되며 로딩 완료 화면이 나오게 됩니다.

0개의 댓글