import 되는 것들. 눈에 띄는 것은 style 을 basestyle 에서 import 해 왓다는 것. 나는 항상 .css 파일로 스타일을 입혀왔기 때문에 이런 방식이 상당히 낯설지만 훨씬 효율적인 것 같다.
exportconstMainContent = styled.section`
position: absolute;
top: 100px;
bottom: 5px;
left: 0px;
width: 100%;
overflow: auto;
& li {
position: relative;
padding: 20px 100px 20px 180px;
& img {
position: absolute;
top: 18px;
left: 120px;
width: 45px;
height: 45px;
border-radius: 15px;
cursor: pointer;
}
& p {
color: #707070;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
min-height: 19px;
font-size: 12px;
& b {
color: #000;
font-weight: bold;
font-size: 14px;
}
}
&:hover {
background-color: #eaeaeb;
}
}
`;
여기서 한 가지 의문이 드는 것은 왜 &li 안에 각종 img, p, b, hover 등의 요소를 넣었을까하는 것이다. 나는 늘 div 위주의 개발을 해왔어서 이런 방식이 많이 낯설다. position 설정도 나는 굳이 하지 않는데 여기서는 absolute 로 설정해 두었다. positoin 은 개념적인 공부가 부족하다고 생각되어 아래 링크를 보고 공부를 했다.
components 를 읽으면서 일종의 규칙을 발견했다. 1. 각각의 component 에는 index.ts 파일이 있고 거기에는 무엇을 default 로 export 할지에 대한 정보가 적혀져 있다. 2. Header, Content, Footer + 기타 기능으로 파일들이 나뉘어져 작성되어 있다. 3. props 는 interface 로 코드 초입에 정리되어 있다. 아마도 타입스크립트의 특징인 듯 하다. 해당 인터페이스에는 변수명과 그에 대한 타입들이 적혀 있다. 4. 주로 기능들을 다루는 컴포넌트의 경우 export 가 여러 개 있고, Header, Content, Footer 는 하나의 export 로 디폴트 익스포트 컴포넌트를 정해 놓고 있다.
components > chattingRoom > ChatBlock.tsx 는,
// 내가 보낸 채팅
// 다른 사람이 보낸 채팅
// 다른 사람이 보냈으며, 프로필 사진을 포함하는 채팅
2번째랑 3번째는 왜 구분했는지 알겠다. 같은 시간, 같은 분에 보내면 첫 번째 메시지만 프사랑 메시지가 같이 오고 그 밑에 따라오는 메시지는 프사 없이 내용만 오니까.
이렇게 세 가지를 export 하고 있는데 이 세 컴포넌트 모두 Chat 컴포넌트를 기반으로 동작한다. 따라서 여기서는 총 네 가지를 export 하는 중이다. 그리고 RightBlock 과 LeftBlock 으로 구분되어 있는데, 이는 내가 보낸 채팅은 오른쪽에 상대가 보낸 채팅은 왼쪽에 표시되게끔 하는 css 장치인 것 같다.
이 부분에서 함수에는 값을 할당할 수가 없는 것이 아닌가.. 왜 void 를 할당햇는지..? 리턴값을 적어둔 것인지..?
Content.tsx 가 이번 플젝의 꽃인 듯하다. 제일 기능이 많고 복잡함. 큰 구조부터 잡으면 스타일은 간단하게 main 하나만 Wrapper 이용. Props 한 개와 Content 컴포넌트 한 개로 구성되어 있다. 그리고 export default Content 하고 있음. 그리고 그 Content 컴포넌트의 경우,
chat 안에 send_user_id 가 있다. 이는 곧 ChattingRequestDto에 있는 것이다. 즉 울리는 chat = ChattingRequestDto 배열의 요소 중 한 개라고 볼 수 있겠다. 해결. 이제 idx 가 의미하는 것이 무엇인지를 찾으면 된다. 다시 chattingList 의 형식을 보면 아하. Array 즉 배열이다. 그렇다면 idx 는 이 배열의 index 를 뜻하는 것이라고 추론할 수 있다. 해결.
정리하자면, renderChatting 은 ChattingResponseDto 를 배열 요소로 가지는 chattingList를 하나하나 훑어서 저장하고 있다.
그리고 위 부분은 인자로 받아온 것들 중 시간이랑 senderId 를 별도의 변수에 저장해 두고 있다.
prevChat 은 이 채팅 보내기 하나 전의 채팅이고 prevCreatedAt 은 prevChat 이 만들어진 시간을 기록하는 용도의 변수인 것 같다. 그리고 여기에서 파생되어 나온 것이 각각 날짜, 시간, 초를 저장하기 위한 prevLocale 시리즈이고. isPrevSender 의 경우 이전의 채팅을 보낸 sender 와 현재 채팅을 보내려는 sender 가 서로 같으면 true 를 다르면 false 를 저장하는 변수. isSameDate 는 설명할 필요 없을 것 같다. sender 에는 person 중에서 person.id 가 senderId 가 일치하는 사람을 찾은 다음 그 사람의 정보를 UserResponseDto 의 타입으로 저장하는 변수이다.
댓글