<Route path="/monsters/detail/:monsterId element={<MonsterDetail/>} />
2.카드리스트에서 카드를 눌렀을 때 이동한다
const moveDetail = () => {
navigate('/monsters/detail/');
카드를 클릭했을 때 이동해야 하므로 카드에 onClick 이벤트를 작성해준다
onClick={moveDetail}
위에서 작성한 곳에 뒤에 아이디 값에 따른 페이지 이동을 시켜주어야 한다
const moveDetail = () => {
naviagte('/monsters/detail/${props.id}')
백틱으로 감싸야 ${} 표시를 사용할 수 있다
움직이는 곳은 아이디값에 따라 달라진다
위에서 라우터 주소에 값을 입력해주는 것까지 완료하였다
몬스터 디테일 컴포넌트에서 아이디 값에 해당하는 데이터를 받아와야 해당 아이디값에 따른 페이지 이동이 가능하다
(라우터 설정만 한 뒤에는 어떤 카드를 눌러도 똑같은 기본 몬스터 카드만 나온다 -> 해당 아이디에 관련된 내용이 나오도록 출력이 되어야 한다)
주어진 주소로 들어가서 엔드포인트에/users/ 를 넣어서
https://jsonplaceholder.typicode.com/users/
검색해보면 모든 유저에 대한 데이터를 확인할 수 있다
뒤에 /원하는데이터번호 를 입력하면 해당 아이디값에 대한 데이터를 확인할 수 있다
몬스터 디테일로 들어가 useEffect를 작성하여 데이터를 fetch 해온다
-> 콘솔 찍으면 데이터를 가져오는 것을 확인할 수 있다
useparams 훅을 활용하여 아이디값에 따라서 데이터 를 다르게 받아오도록 작성한다
const params = useParams();
카드를 눌렀을 때 먼저 초록괴물 나온뒤에 해당 아이디 값의 정보로 바뀌는데 이것은 useEffect 일어나는 시점과 관련있다
컴포넌트가 마운트 된 이후에 실행 되기에 초록괴물이 먼저 나온다
실행순서는 먼저 리턴을 통해서 ui를 그려주고 useEffect통해서 데이터 받아오고 몬스터 스테이트 안에 저장해준다
함수 컴포넌트가 다시 실행이 되면서 새롭게 Fetch 함수를 통해서 받아온 데이터를 사용해서 카드를 그릴 수 있게 된다. 이후에 화면에 몬스터에 대한 정보가 나타나게 되는 것이다
만약에 데이터가 들어오지 않았다면 화면에 표현하지 말아라 라고 로직을 작성해준다
데이터가 안들어온것을 어떻게 판별할까?
들어오지 않았을때는 빈객체이다 -> 프로퍼티로 접근하면 빈객체일때는 정보가 없기 때문에 undefined출력될 것이고
이후에 데이터가 들어오면 truthy한 값으로 바뀌면서 뒤에가 실행되어 화면에 출력된다
previous -> url 아이디값을 빼준다
next -> url 아이디값을 더해준다
next 버튼을 눌렀을 때 문자열처럼 1이 더해지는데 이것 params 안에 객체는 문자열처럼 더해지기 때문이다 (빼기는 문자열에 없기 때문에 알아서 숫자로 바꾸어서 빼줌)
-1은 제대로 실행된다 (+는 문자 연산으로 인식해서 뒤에 1을 그냥 그대로 출력한다
const goToPrevious = () => {
navigate('/monsters/detail/${params.monsterId -1}');
const goToNext = () => {
navigate('/monsters/detail/$Number(params.monsterId) + 1}');
해당 로직 작성 후 버튼에 onClick 이벤트에 작성해준다
뒤에 Url도 백틱으로 감싸서 사용해야한다
버튼을 누르면 url만 변경이 된다 -> 변경되는 것을 UseEFfect가 보고있다가 변경된 url 값에 따라서 fetch 받고 state에 넣어준다 -> 업데이트된 state를 통해서 새로운 카드 그림이 화면에 그려지게 된다