๐พ๋ค์ด๊ฐ๋ฉฐ
์ํฐ๋ ํ๋ฆฌ์จ๋ณด๋ฉ ๊ฐ์์์ ์ถ์ํ๋ฅผ ํ ๋ ํจ์์ ์ญํ ์ ๋ฐ๋ผ ์ถ์ํํ์ฌ ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ต๋๋ค. ๊ทธ๋์ ์ง์ ์ด ์ฝ๋์์ ํด๋น ๋ด์ฉ์ ํ ๋๋ก ์ ์ฉ์ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
โจ๋ณธ๊ฒฉ์ ์ผ๋ก
โ ํจ์ ๋ถ๋ฆฌํ๊ธฐ
๊ธฐ์กด ์ฝ๋ ์ ๋๋ค. ํ๋ก์ ํธ์์ ๋ณต์กํ ๋ก์ง์ ์ฌ์ฉํ์ง ์์์ ๊ฒจ์ฐ ์ฐพ์๋์ต๋๋ค.
import React, { useRef, useEffect } from 'react'; import styled from 'styled-components'; const ResizingTextarea = ({ onChange, ...props }) => { const textareaRef = useRef(); useEffect(() => { handleResizeHeight(); }, [props.value]); const handleResizeHeight = () => { if (textareaRef.current) { textareaRef.current.style.height = 'auto'; textareaRef.current.style.height = textareaRef.current.scrollHeight + 'px'; } }; return <StyledTextarea ref={textareaRef} onChange={onChange} {...props} />; }; export default ResizingTextarea;
handleResizeHeight
ํจ์์ ์ญํ ์ ๊ณ์ฐ์ด๋ฉฐ, ์ธ๋ถ์ ์ํ์ ์์กดํ์ฌ ๋ถ์ ํจ๊ณผ๋ฅผ ์ด์ฉํ๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ถ์ ํจ๊ณผ๋ฅผ ์ค์ด๊ธฐ ์ํด textareaRef
์ ํด๋นํ๋ ๊ณณ์ ํ๋ผ๋ฏธํฐ๋ก ์ ์ธํ์ฌ ์ธ์๋ฅผ ๋ฐ์ผ๋ ค๊ณ ํฉ๋๋ค.
/** *@param ref textarea์ ๋ํ ์ฐธ์กฐ **/ const handleResizeHeight = (ref) => { if (ref.current) { ref.current.style.height = 'auto'; ref.current.style.height = ref.current.scrollHeight + 'px'; } };
์์ ๊ฐ์ด ๋ฐ๊พธ์ด ์ปดํฌ๋ํธ์ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.๊ธฐ์กด์๋ ResizingTextarea
๋ผ๋ ๊ณ ์ ๋ ์คํ์ผ์๋ง resizing์ด ๊ฐ๋ฅํ๋ค๋ฉด ์ด์ ๋ ๋ค๋ฅธ ์คํ์ผ์ textarea์๋ ์ฝ๊ฒ ์ ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฌผ๋ก ์ปค์คํ
ํ
์ผ๋ก ๋นผ๋ ์ข๊ฒ ์ง๋ง, ๊ฐ์ ๊ฒฝ๋ก์ ์กด์ฌํ๋ ๊ฒ๋ ๋์์ง ์๊ณ , ๋ณ๋์ React ํ
์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ ์ต์์์๋ง ์ฌ์ฉํ ์ ์๋ ์ ํ ์ฌํญ์ด ์๊ธฐ ๋๋ฌธ์ ํจ์๋ก๋ง ๋์์ต๋๋ค.
๋ํ ๊ธฐ์กด์๋ textarea์ ์ด๋ฒคํธ์ฒ๋ผ ๋ถ์ฌํ์ฌ handle์ด๋ผ๋ ์ปจ๋ฒค์
์ ์ฌ์ฉํ์์ง๋ง, ref๋ฅผ ๋๊ฒจ์ฃผ๊ณ , useEffect์์์ ๋์ํ๊ธฐ ๋๋ฌธ์ handle์ ์ ์ธํ resizeHeightForTextarea
๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ณ ๋ ค ์ค์
๋๋ค.
โ๏ธ๊ฒฐ๋ก
์ถ์ํ๋ฅผ ํ ๋, ํด๋น ํจ์์ ๋ชฉ์ , ํจ์์ ์ญํ ์ ๋ํด ์๊ฐํด๋ณด๊ธฐ๋ก ํ์ต๋๋ค. ์ญํ ์ด ์์ฌ์๊ณ , ์ด์ฉ ์ ์์ด ์ก์ ์ ์ญํ ์ ํ๋ ํจ์ ๋ด์์ ๊ณ์ฐ์ ์ญํ ์ ํ๋ ํจ์๋ฅผ ์ต๋ํ ๋ถ๋ฆฌํ๋ ๊ฒ ์ข๋ค๊ณ ํฉ๋๋ค! ์ผ๋ถ๋ผ๋ ์ฌ์ฌ์ฉ ํ ์ ์๋ค๋ฉด ๋ง์ ๋๋ค.
โ ํผ๋๋ฐฑ ์ถ๊ฐ

์ด ๊ธ์ ์ต์๋์ธ์ ํตํด ๋ฐํํ์์ต๋๋ค.
'Update' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝํ ] ๋ฌธ์์ด ์์ถํ๋ ๋ฐฉ๋ฒ (0) | 2024.01.22 |
---|---|
๊นํ๋ธ๋ก ์คํฐ๋ ์งํํ๊ธฐ (0) | 2024.01.12 |
[์์ฑ์ค]Storybook๊ณผ compound components์ error... (0) | 2023.12.13 |