=> 이번 기회에 CRUD를 제대로 배우고 가고 싶어서, 어렵게 생각하는 메인 기능을 맡게 됐다.
=> 게시글 CRUD, 댓글 CRUD, 답변 CRUD
http://ec2-15-164-211-228.ap-northeast-2.compute.amazonaws.com:8080/docs/index.html
http://pre-project-group-27.s3-website.ap-northeast-2.amazonaws.com/
팀 주소: https://github.com/codestates-seb/seb41_pre_027/tree/dev
개인 주소: https://github.com/FordangIT/seb41_pre_027
fetchCreate, fetchDelete, fetchPatch만 있고, 데이터를 불러오는 것은 useFetch로 작성한 코드를 불러오면 되는 것이였다.
사용자 권한이 필요한 삭제/ 수정 기능은 fetch, headers에 Authrization에 토큰 값을 넣어줘야 한다.
내가 구현에 성공했는데, 성공한 줄 모르고 나아중에 알게돼서 다시 몇시간동안 코드를 수정한다.
=> 내가 코드를 고쳤다면 서버를 끄고, 다시 npm run start로 구현이 됐는지 확인을 해야한다.
=> 로그아웃하고 로그인을 다시 해서 만료된 토큰 때문인지 확인도 해봤어야 한다.
useInput을 이용해 데이터의 상태를 관리할 때 fetch에 들어가는 데이터는 value가, input에 값으로 들어가는것은 {...bindSetValue}이 값이다!!!
댓글이나, 답변의 경우에는 useParams()를 통해 id 값을 가져오는 걸로는 해당 댓글과 답변을 가져올 수 없다는 것을 깨달았다. 그래서 각각 commentId나 answerId를 가져와야 했는데, 이때 props drilling으로는 엄청난 한계를 깨달았다. 내가 작성한 코드지만 어지러웠다. 그래서 redux를 이용해서 구현했더니,,, 너무나 편리해졌다.
코드 상 멀리 떨어져 있는 title의 input과 content의 toast ui를 버튼 하나로 post하는것이 어렵게 느껴졌으나 form 태그로 해결했다.
댓글 수정 페이지를 따로 만들기 싫어서 => 모달창으로 해결본건 참 잘했다.
toast ui에서 적용한 마크다운이 실제 view에선 적용이 안됐다. => <Viewr initialState/>
를 나타내는 페이지에 작성해준다.
뷰 페이지에 import { Viewer } from '@toast-ui/react-editor'추가
[Viewer 컴포넌트에 제이슨 그대로 전달해주니 잘보이네요 ~
html 포맷으로 내보내는건 리스트에 보여지는 텍스트를 정규식 검색해서 해결
그러면 write 페이지에서 데이터 내보낼 때는 html 포맷으로 줘야 정규식을 안고쳐도 될 것 같습니다getMarkDown() (x) / getHTML() (o) 근데 이거 마크다운이나 위지윅으로 작성하면 잘 되기도 하고 fetch 에러도 나오고 해서 이미지가 원인이 아니고 토스트에서 보내는 http요청 자체에 어떤 버그가 있을 수도 있겠네요 //초이님 말씀]
내가 해본 유효성 검사는 required 속성을 추가해준 것이다.
상태 값을 잘 받아왔는지 console.log로 해보는 것보다 alert의 방식이 더 좋았다.
환경변수 처리한 api url 코드를 푸시해서, 환경변수 파일 만들고 클라이언트 개발서버를 껐다 켜줘야 된다.
undefined/api 프록시의 문제였다. 깃 pull을 받아오면서 gitignore처리된 환경변수들이 안들어가서 에러가 생긴 것이다.
.env.development랑 .env.production 파일 넣어주고 코드도 작성해준다.
<div className="answer__length">
{getanswer ? getanswer.length : 0} Answer
</div>
깃이 pull 완료했다는데, 내 로컬에 코드들이 안들어올 때 최후의 방법,,,
import { Cookies } from 'react-cookie';
const cookies = new Cookies();
const Authorization = cookies.get('Authorization');
[요청 헤더]
Authorization : Bearer (accessToken)
[요청 바디]
title: 제목
text: 내용