๐ฅ ์ค๋ ์ด๋์ ๋์ ํด๋ณด์ จ๊ณ , ๋ฌด์์ ๋ฐฐ์ฐ์ จ๋์?
๐ ํ์ตํ์๋ฉด์ ๊ถ๊ธํ์ ๋ถ๋ถ์ด๋, ์ด๋ ค์ ๋ ์ ์ ๋ญ๊น์?
componentDidUpdate
์์ this.setState๋ฅผ ํธ์ถํ๋ฉด ๋ฌดํ ๋ฃจํ ๋ฐ์! ๋ฐ๋ผ์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํด์ ๋ฌดํ ๋ฃจํ๋ฅผ ๋ฐฉ์งํด์ค์ผ ํ๋ค.
๐ ๋ด์ผ์ ์ด๋ป๊ฒ ํด๋ณด๊ณ ์ถ์ผ์ธ์?
ํด๋์ค ๊ธฐ๋ฐ ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ
componentDidMount
- ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ์งํ์ ํธ์ถ๋๋ค. ์ปดํฌ๋ํธ๊ฐ ํ๊ฐ๋๊ณ DOM์ ๋ ๋๋ง๋๋ ์์ useEffect๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ๋ค. useEffect์ ๋น ์์กด์ฑ ๋ฐฐ์ด์ ์ ๋ฌํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง๋๋ ์์ ์๋ง ํธ์ถ๋๋ค. ์ด๋ componentDidMount๊ณผ ๊ฐ์ ์ญํ ์ ์ํํ๋ ๊ฒ์ด๋ค.
componentDidUpdate
์ปดํฌ๋ํธ๊ฐ ๊ฐฑ์ ๋๋ฉด ํธ์ถ, ์์กด์ฑ ๋ฐฐ์ด์ด ์๋ useEffect์ ๋์ผ
์์กด์ฑ ๋ฐฐ์ด์ฒ๋ผ ํน์ ๊ฐ์ด ๊ฐฑ์ ๋์์ ๋์๋ง ์ํ ๊ฐ์ ๊ฐฑ์ ํ์ฌ์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌดํ ๋ฃจํ๊ฐ ๋ฐ์ํ๋ค.
์ธ์๋ก (
์ด์ props
,์ด์ state
)๋ฅผ ์ ๋ฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ด์ฉํด์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
//๐ ํด๋์ค ๊ธฐ๋ฐ ์ปดํฌ๋ํธ class User extends React.Component { constructor(props) { super(props); this.state = { filteredUsers: DUMMY_USERS, searchTerm: "", }; } componentDidUpdate(prevProps, prevState) { // ์ํ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋์๋ง setState๋ก ๊ฐฑ์ ํ๋ค. if (prevState.searchTerm !== this.state.searchTerm) { this.setState({ filteredUsers: DUMMY_USERS.filter((user) => user.name.includes(this.state.searchTerm) ), }); } } } // ๐ ํจ์ํ ์ปดํฌ๋ํธ const User = (props) => { const [filteredUsers, setFilteredUsers] = useState(DUMMY_USERS); const [searchTerm, setSearchTerm] = useState(""); useEffect(() => { setFilteredUsers( DUMMY_USERS.filter((user) => user.name.includes(searchTerm)) ); }, [searchTerm]); };
componentWillUnmount
- ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ญ์ ๋๊ธฐ ์ง์ ์ ํธ์ถ๋๋ฉฐ useEffect์ cleanup๊ณผ ๋์ผ
๐ JEJU.log
๐๐ปโโ๏ธ ๊น๋ ์์ ์์ ๊น์ง ํด์๋๋ก ๊ฑธ์ด๊ฐ๊ธฐ (๋๋ฒ ์ด๋..)
ํ ์๊ฐ ์ ๋๋ฉด ๊ป์ด๋ผ๊ณ ์๊ฐํด์ ๊ฒฝ์น ๊ตฌ๊ฒฝํ ๊ฒธ ํด์ ๋๋ก(์ฌ๋ 20๋ฒ ์ฝ์ค ์ค๊ฐ)๋ฅผ ๊ฑธ์ด๋ดค๋ค. ์ฌ์ธ์ค ์์๋๋ฐ ์ ์ฃผ๋ ๋ ์ด ๋๋ฌด ๋๋ฌด ๋์์ ์ ๋ง์ด์ง ๋๋ฌด ํ๋ค์๋ค. ์ ํฌ๋ฆผ๋ ์๋ฐ๋ผ์ ์ผ๊ตด์ด๋ฉฐ ํ์ด๋ฉฐ ๋ค ๋นจ๊ฐ๊ฒ ๋๊ณ ๋์ ๋ป๋ป ํ๋ ธ๋ค. ์ ์๋ฌด๋ ์๊ฑธ์ด๊ฐ๋์ง ์ ๊ฑฐ ๊ฐ์๋ค.. ๊ทธ๋๋ ๋ ์ด ๋ง์์ ๋ฐ๋ค๊ฐ ๋๋ฌด ์๋ปค๋ค.