Conversation
feat: 리덕스 모듈 추가
chore: 전역 상태 초기화 JSON 데이터 기반으로 변경
chore: RTK 적용 action 완성
feat: use next redux wrapper
chore: RTK logger middleware 추가, RootState, AppDispatch type export 코…
feat: editor/[postId] page 구현
feat: 새 글 작성 버튼 구현
feat: 수정 후 홈 화면으로 이동
fix: build error
chaaerim
left a comment
There was a problem hiding this comment.
안녕하세요! 6주차 코드리뷰 파트너 김채림입니다 !!
만드신 블로그 보고 벨로그가 떠올라서 반가웠습니다🤗 (벨로그 의도하신거 맞겠ㅈ ㅛ ..? )
다만 리덕스를 사용해본적이 없어 공부한다는 마음으로 책 펴놓고 코드를 봤어요 ,,
어디서 오류가 발생했는지 찾아보고 싶었는데 리덕스 코드를 자세히 보는 것이 처음이라 아무 도움도 드리지 못한 것 같아 죄송해요,, , ㅠ
저희도 리덕스를 사용해볼까 고민중이었는데 코드 보고 많이 배워갑니다.
그럼 스터디 시간에 뵙겠습니다!!!!!!!!
| import React from 'react'; | ||
| import styled from 'styled-components'; | ||
| import dayjs from 'dayjs'; | ||
| function PostItem({ data }: any) { |
| overflow: hidden; | ||
| text-overflow: ellipsis; |
| @@ -0,0 +1,43 @@ | |||
| import { createSlice, PayloadAction } from '@reduxjs/toolkit'; | |||
| const newPost: IPost = { | ||
| postId: nextPostId, | ||
| title: action.payload.title, | ||
| content: action.payload.content, | ||
| date: action.payload.date, | ||
| }; |
There was a problem hiding this comment.
리덕스 상태를 변경시키기 위해서는 action을 호출해야한다는게 이거였군요,,
| function handleSubmitBtnClick() { | ||
| const now = dayjs(); | ||
| const postToAdd = { | ||
| postId: 'dummy', | ||
| title: title, | ||
| content: content, | ||
| date: now.format(), | ||
| }; | ||
| addPostTrigger(postToAdd); | ||
| const nextPostId = posts.length + 1; | ||
| // router.push(`/detail/${nextPostId}`); | ||
| router.push(`/`); |
There was a problem hiding this comment.
여기서 저장은 되는 것 같은데 메인 페이지에서 기존 게시물을 누르면(어떤 게시물을 눌러도) 바로 array가 4개로 다시 세팅되어 버리네요ㅠ 오류를 찾고 싶은데 리덕스를 처음봐서 잘 안보여요 흐흐흐긓ㄱ
siwonblue
left a comment
There was a problem hiding this comment.
안녕하세요.
코드리뷰 파트너 전시원입니다.
홍대 시험기간이라고 들었는데 과제 하시느라 정말 수고 많으셨습니다.
스터디때 뵙겠습니다.
감사합니다.
시원 드림.
| { | ||
| "postId": "1", | ||
| "title": "포켓돈짱", | ||
| "content": "삽질하느라 죽는줄 알았슴다...ㅠㅠㅠ흐극긓흑흑 \n이렇게 줄바꿈도 할 수 있어요.", |
There was a problem hiding this comment.
규진 성우팀이 늦길래 의아해서,
많은 기능을 넣으려다 시간 부족으로 그럴 거라 생각했는데 역시 맞는 거 같네요 ㅎㅎ..
| import styled from 'styled-components'; | ||
| import dayjs from 'dayjs'; | ||
| function PostItem({ data }: any) { | ||
| const date = dayjs(data.date).format('YYYY.MM.DD'); |
| h1 { | ||
| color: ${({ theme }) => theme.color.blue}; | ||
| font-size: 2rem; | ||
| font-weight: 700; | ||
| padding: 50px 0; | ||
| } | ||
|
|
||
| button { | ||
| margin-left: 10px; | ||
| font-size: 1rem; | ||
| } |
| e: | ||
| | React.ChangeEvent<HTMLInputElement> | ||
| | React.ChangeEvent<HTMLTextAreaElement> | ||
| ) { | ||
| const { value, name } = e.target; |
There was a problem hiding this comment.
저는 handler 를 두 개 썼는데 이런 식으로 하나로 할 수도 있군요!
배포링크
https://react-blog-15th-dhra2rce1-9yujin.vercel.app/
TODO
Directory Structure
/pages: auto routed pages by next.js
/store
/freatures: contains all feature folders
/hooks: custom hooks
/shared: util functions, interfaces, enums
/styles: global style (+reset), theme (+media query)
Key Questions
Next.js를 사용하는 이유, SEO란?
Next.js는 React를 기반으로 한 Framework이며, SSR를 구현하고 SEO에 유리하기 때문에 사용한다. Next.js는 Server에서 받은 사용자의 접속 요청을 초기에 SSR방식으로 렌더링 될 HTML을 보내고, 브라우저에서 JavaScript를 다운로드하고 React를 실행하기 때문에 SEO가 가능하다. 또한 다른 페이지로 이동할 경우 CSR방식으로 Server가 아닌 브라우저에서 처리함으로써 SPA장점도 유지할 수 있다.
SSR 이나 Code Splitting 같은 기능을 직접 구축하여 사용하는 것은 유지보수 측면에서 부담이 된다.
CSR은 검색 엔진 최적화에 불리하기 때문에 SSR을 구현하여 검색 엔진 최적화를 실현할 수 있다.
성능 최적화를 위해 사용한 방법
포스트 상세 페이지의 경우 SSG로 구현했습니다. SSR, SSG에 대한 이해가 부족하여, 리덕스 내의 전역 상태를 업데이트 하는 과정에서 생긴 오류를 해결하지 못하고 과제를 제출합니다.
전반적인 협업 과정
각자 이름으로 브랜치를 만들어서 기능단위로 작업 후 dev 브랜치에 merge 하며 진행했습니다. 본 프로젝트에서는 깃 플로우를 공부해서 체계적인 협업을 진행해야겠다고 생각했습니다.