React로 채팅앱 구현 시 스크롤 맨 아래로 내리는 법

지은·2023년 4월 4일
8

🌴 모동숲 마켓

목록 보기
3/9

채팅창에서는 내가 메세지를 보낼 때마다, 또는 상대가 나에게 메세지를 보낼 때마다 스크롤이 맨 아래로 내려가도록 해야한다.

생각보다 간단하지만 그래도 정리하고 넘어가려고 한다!

  1. 먼저 메세지 맨 아래에 div를 하나 만든다. 콘텐츠는 비운 채로 둘 것이다.
<MessagesContainer>
  {messages.map((message) => (
    <Message />
  )}
  <div></div> // <-- 이 위치로 스크롤이 내려오게 할 것이다.
</MessagesContainer>

  1. useRef로 ref 객체를 하나 만들고, 아까 만든 div에 ref 값으로 설정한다.
const messageEndRef = useRef<HTMLDivElement | null>(null);

...

<MessagesContainer>
  {messages.map((message) => (
    <Message />
  )}
  <div ref={messageEndRef}></div> // <--
</MessagesContainer>

  1. useEffect에 messages를 종속성 배열에 넣고, 아래처럼 작성해준다.
    scrollIntoView() 메소드는 자신이 호출된 요소가 사용자에게 표시되도록 상위 컨테이너를 스크롤한다.
useEffect(() => {
  messageEndRef.current.scrollIntoView({ behavior: 'smooth' });
}, [messages]);

이렇게 되면 messages가 업데이트될 때마다 스크롤이 맨 아래로 내려오게 된다.

완성본 👐

profile
블로그 이전 -> https://janechun.tistory.com

7개의 댓글

comment-user-thumbnail
2023년 4월 6일

깔끔하고 재밌네요 !! 잘 보고 갑니다 ~!

답글 달기
comment-user-thumbnail
2023년 4월 7일

우왕 깔끔한정리

답글 달기
comment-user-thumbnail
2023년 4월 8일

지은님 글 보고 따라해봐야겠어요!

답글 달기
comment-user-thumbnail
2023년 4월 9일

scrollIntoView 알아뒀습니다 나중에 써먹겠습니다

답글 달기
comment-user-thumbnail
2023년 4월 9일

필요할 때 써먹어보겠습니당 ㅎㅎ

답글 달기
comment-user-thumbnail
2023년 4월 9일

우왕 잘 보고 갑니다!!

답글 달기
comment-user-thumbnail
2024년 1월 25일

많은 도움이 됐습니다! 포스팅 감사합니다 💌

답글 달기