ㅇㅇㅈ Blog

프론트엔드 수행중

0%

2022-06-02-TIL

React Link to로 props 전달하기

실습과제를 진행하면서
게시글을 누르면 디테일페이지로 이동하고, 게시글 디테일을 볼 수 있게 만드는 과정에
data를 넘겨주는 방법에 대해 고민이 되었다

첫 번째로 해당 post의 id값을 이용해 데이터를 필터하는 법..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function PostList(props) {
return (
<>
{props.postList &&
props.postList.map((post) => {
// console.log(post);
return (
<PostCardDiv key={post._id}>
<Link to={`/Postdetail/${post._id}`}>
<p className='title'>{post.title}</p>
</Link>

<div className='author'>
<p className='name'>{post.author.name}</p>
<p className='date'>
{moment(post.updatedAt).format('YYYY년 MM월 DD일, hh:mm')}
</p>
</div>
<p className='content'>{post.content}</p>
</PostCardDiv>
);
})}
</>
);
}

postList에서 제목을 누르면 해당 post의 id값을 가진 url 주소로 이동이 된다

그럼 해당 컴포넌트에서 다시 aiox로 데이터를 호출해 id값을 비교해서 해당 게시물을 보여준다..

많이 아닌거 같아 다시 작성

1
2
3
<Link to={`/Postdetail/${post._id}`} state={{ post }}>
<p className='title'>{post.title}</p>
</Link>

react-router-dom에서 Link 를 이용해 데이터를 넘겨 줄 수 있다
해당 게시물의 정보를 state에 담아 보내는 것

그럼 useLocation을 통해 state값을 조회 할 수 있다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import React from 'react';
import { useLocation } from 'react-router-dom';
const PostDetail = () => {
const location = useLocation();
console.log(location);

return (
<>

</>
);
};

export default PostDetail;

콘솔로 location을 찍어보면

클릭한 게시물의 데이터가 담겨 있다.

PostDetail에서 state를 조회 할 수 있는 건

route path로 설정 해둔 url의 element가 PostDetail 컴포넌트 이기 때문에 해당 컴포넌트로 데이터가 들어가는 것