-
[23Ideal/React] 게시판 만들기 (2) - 게시물 목록 조회하기 (fetch, get API)Project/23ideal 2022. 7. 18. 11:49
앞에서 만든 게시판 테이블에 게시물 목록을 넣어줄 것이다.
앞 게시물은 게시물 제목, 작성자, 작성일을 직접 입력하였지만이번에는 백엔드와 연결하여 게시판 목록 api 를 불러와 게시판 목록을 조회해보자
fetch 를 사용하였고, fetch method 중 "GET" 을 사용하면 API를 불러올 수 있다
const [postData,setPostData]=useState([]); useEffect(()=>{ fetch("url 경로", { // method:"GET", headers: { Authorization: `Bearer ${access_token}`, }, }) .then((res) => res.json()) .then((response) => { setPostData(response.data); }); },[]);
fetch method는 GET 외에도 POST, DELETE, PUT 등이 있다
하지만 디폴트는 get 이기 때문에 주석처리한 method:"GET" 을 꼭 써주지 않아도 method 가 GET 으로 작동한다백엔드에서 검증된 토큰이 있어야 게시물을 조회할 수 있게끔 설정해놓았기 때문에
access_token 을 헤더에 담아 정보를 불러올 해당 백엔드 경로에 보내준다정상적으로 API 를 불러오면, postData 에 불러온 data 값이 담길 것이다
return ( <> <table className="common-table"> <thead> <tr> {headersName.map((item, index) => { return ( <td className="common-table-header-column" key={index}> {item} </td> ); })} </tr> </thead> <tbody > { postData.data.map((post, i) => { return ( <tr> <td>{i + 1}</td> <Link to="/NoticeRead"> <td> {post.title}</td> </Link> <td>{post.createdDate.substring(0, 10)}</td> <td>{post.userName}</td> </tr> ); }) } </tbody> </table> </> );
그리고 앞 게시물에서 만들어던 게시판 테이블에 map 을 이용하여 postData 를 반복 렌더링 해주면 된다.
* 백엔드에서 api를 불러오면 createdDate 가 "2022-07-18T11:11:11" 이런 형태로 넘어오기 때문에 substring을 이용하여 2022-07-18 만 나타나게 하였다
헤맸던 점 & 해결 방법
postData 의 초기값이 [ ] 이기 때문에 map을 사용하여 렌더링할때 초기값이 null 이라 렌더링되지 않았다
api를 먼저 불러오고, postData의 값이 초기값에서 response.data 값으로 바뀐 후에야 렌더링이 되는 것이다이 문제를 어떻게 해결할까 하다가
postData 가 초기값이 아닐때 return 이 되게끔 (렌더링이 되게끔) JSX에 삼항연산자를 써주었다 (조건문)length를 이용하였고 postData 가 초기값일때는 postData.length 가 0 이므로, 0이 아닐때 렌더링이 되게끔 해주면 된다
return ( <> <table className="common-table"> <thead> <tr> {headersName.map((item, index) => { return ( <td className="common-table-header-column" key={index}> {item} </td> ); })} </tr> </thead> <tbody > { postData.length != 0 ? postData.data.map((post, i) => { return ( <tr> <td>{i + 1}</td> <Link to="/NoticeRead"> <td> {post.title}</td> </Link> <td>{post.createdDate.substring(0, 10)}</td> <td>{post.userName}</td> </tr> ); }) : <div> loading... </div> } </tbody> </> );
그럼 postData 가 초기값일때는 loading... 이라는 문구가 뜨고 postData 값이 바뀌었을때 게시판 목록이 렌더링 된다!
'Project > 23ideal' 카테고리의 다른 글
[23Ideal/React] 게시판 만들기 (3) - 게시물 상세 조회하기 (fetch, get API) (0) 2022.08.06 [23Ideal/React] 게시판 만들기 (1) - 게시판 테이블 만들기 (0) 2022.07.18 [23Ideal/React] API 데이터 가져오기 (백/프 협업 Swagger 확인) (0) 2022.05.17