ํ”„๋กœ์ ํŠธ

[useRef] ์ฑ„ํŒ… ์ž…๋ ฅ์‹œ ์ตœ์‹ ํ•ญ๋ชฉ์œผ๋กœ ์Šคํฌ๋กค ์ด๋™ํ•˜๊ธฐ

Yuuuki 2024. 4. 26. 16:40

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

์ด์™€๊ฐ™์ด, ์ฑ„ํŒ…์„ ์ž…๋ ฅํ–ˆ์„๋•Œ ์ˆ˜๋™์œผ๋กœ ์Šคํฌ๋กค์„ ํ•ด์ค˜์•ผํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์—ˆ๋‹ค.

 

"use client";

import { useEffect, useRef } from "react";

function MessageList({ messageList }) {
  const scrollRef = useRef(null);

  useEffect(() => {
    if (scrollRef.current) {
      scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
    }
  }, [messageList]);

  return (
    <div className="overflow-scroll scrollbar-hide" ref={scrollRef}>
      {messageList.map((message) => {
        return (
         <div>๋ฉ”์‹œ์ง€</div>
        );
      })}
    </div>
  );
}

export default MessageList;

์ฑ„ํŒ…์˜์—ญ์— useRef๋ฅผ ์ฃผ๊ณ , useEffect์˜ dependency์ธ messageList๊ฐ’์ด ์ถ”๊ฐ€๋ ๋•Œ๋งˆ๋‹ค, ์ž๋™์œผ๋กœ์Šคํฌ๋กค์„ ๋‚ด๋ ค์ค€๋‹ค.

 

scrollTop ์†์„ฑ์„ scrollHeight ์†์„ฑ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋Š”๋ฐ, scrollTop์€ ์š”์†Œ์˜ ์ˆ˜์ง ์Šคํฌ๋กค ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, scrollHeight๋Š” ์š”์†Œ์˜ ์ „์ฒด ๋‚ด์šฉ ๋†’์ด๋ฅผ ํฌํ•จํ•œ๋‹ค.

๐Ÿ‘‰๐Ÿป ์Šคํฌ๋กค ์œ„์น˜๋ฅผ ์š”์†Œ์˜ ๊ฐ€์žฅ ์•„๋ž˜๋กœ ์„ค์ •ํ•˜์—ฌ ์ตœ์‹  ๋‚ด์šฉ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋˜๋Š”๊ฒƒ์ด๋‹ค.

 

 

์™„์„ฑโœจ