주소를 Rest-ful하게 작성하기 위해서 REST-api와 비슷하게 작성한다. 이렇게 하면 주소가 아래처럼 나온다.
REST-api는 앞에 GET, PUT, DELETE, POST 가 앞에 나와야 하는데 그렇지 못하므로 new, edit 을 사용하여 비슷하게 만든다. 이렇게 폴더 구조를 설계하는 이유는 브라우저 주소와 관련되어 있기 때문이다.
수정하기 페이지를 만들때 2가지 방법이 있다.
1. /boards/edit
2. /boards/:boardId/edit
그러나 1번은 게시글 id가 없는 상태에서 등록하는 것이다. 게시물을 등록 후에 Id를 등록 받는 형태이기에 안된다. 이렇게 하면 어떤 게시물을 수정할지 알지 못한다.
수정하기 페이지는 이미 있는 Id에서 수정하는 것이다. 따라서 2번째 방법으로 폴더를 만들어줘야 한다.
2번 방법으로 /boards/:boardId/edit 폴더구조를 만들고 index.js는 /boards 폴더에 들어가고 목록을 보여주고 그 안에서 수정하기 버튼을 클릭하게 되면 그때 boardId를 수정하면 된다.
padStart()
대게 수정 페이지에서 등록 페이지에서 사용한 컴포넌트를 재사용하는 경우가 많다.
페이지 | 폴더구조 |
---|---|
목록 | /boards |
등록하기 | /boards/new |
상세보기 | /boards/:boardId |
수정하기 | /boards/:boardId/edit |
props.drilling
이라고 한다. 게시물 등록
이 진행되는데, 안에 있는 onClickSubmit 함수가 실행되고 Mutation인 나의함수 가 요청이 되고 응답으로 게시물 번호를 받아온다.상세페이지로 이동
한다. 수정페이지로 이동한
다.router 객체
를 사용한다.query
를 통해 라우팅 정보를 얻을 수 있다.edit 폴더의 위치
이다. onClickUpdate={onClickUpdate}
도 추가해줘야 한다.<S.BlueButton
// true 넘길때는 mycolor=true가 아닌 {true}로 넘겨줘야 한다.
onClick={props.isEdit ? props.onClickEdit : props.onClickSubmit}
>
{props.isEdit ? '수정하기' : '등록하기'}
</S.BlueButton>
그래서 props.isEdit이 true이면 수정하기 버튼을 클릭하여 props.onClickUpdate가 실행되고
props.isEdit이 false이면 등록하기 버튼을 클릭하여 props.onClickSubmit이 실행되게 한다.
onClickUpdate 함수에 들어와 updateBoard를 실행시켜주어야 한다.
이때 실행할 때 $변수
를 선언해주고 varialbes
에 값을 넣어주어야 한다.
[number]/edit/index.js 이므로 router.query.number 하면 number를 가져올 수 있다.
여기서 주의할 것이 onClickSubmit에서 router.query.number를 하게 되면 등록하기 버튼이 클릭 되는 시점인 presenter에서 등록하기 페이지로 이동한다. 등록하기 페이지는 boards/new/index.js에 있으므로 undefined가 나온다
container의 위치에 따라 어디에 import 되는지에 따라서 페이지의 주소가 달라지고 router.query의 값도 달라진다. 따라서 router.query를 사용할 때에는 사용되는 컴포넌트가 어느 페이지에서 import 될 것인지
페이지에 따라서 router.query를 사용할 수도 있고 없고가 나뉘어진다.
여기까지하면 페이지 등록하기 페이지에서 상세페이지로 이동
상세페이지에서 수정하러 이동하기 하면 수정페이지로 이동
수정페이지에서 수정하기 클릭하면 상세페이지로 다시 이동하게 된다.
문제
React, Vue, Angular 중에 사용량이 제일 많고 커뮤니티가 잘 활성화 되어 있으니 당시 전공생이지 않았기 때문에 다양한 레퍼런스를 얻고자 React를 선택하였고,
jquery가 대신 React는 컴포넌트 기반의 개발 방식이 도입이 되었다. UI와 로직을 부품화 하여 재사용성을 높였다.