์๋
ํ์ธ์, ์ด๊ฒ์ ์ง๋ฌธ์ ๊ฐ๊น์ต๋๋ค. componentDidUpdate
DOM ์กฐ์์ ๊ดํ ํ ๋ก ์ ์ด๊ณ ์ถ์ต๋๋ค.
React ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค๊ณ ์์ต๋๋ค. CSS๋ ์ด ํ๋ฌ๊ทธ์ธ์ด ์ํํด์ผ ํ๋ ๋ชจ๋ ๊ฒ์ ๋ค๋ฃฐ ๋งํผ ๊ฐ๋ ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ์ผ๋ถ DOM ๊ณ์ฐ์ ์ํํด์ผ ํฉ๋๋ค. ๋ฌธ์ ๋ ๋์ผํ ๊ตฌ์ฑ ์์์ ์ํด ๋ ๋๋ง๋ ๋ค๋ฅธ DOM ์์์ getBoundingClientRect() ๋ฐํ ๊ฐ์ ๋ฐ๋ผ ์ผ๋ถ CSS ์์ฑ์ ์กฐ์ ํด์ผ ํ๋ค๋ ๊ฒ ์ ๋๋ค.
๋ฐ๋ผ์ ๊ธฐ์ ์ ์ผ๋ก 3๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.
1) getBoundingClientRect
์์ componentDidUpdate
setState
๋ฅผ ๊ณ์ฐํ๊ณ ๊ณ์ฐ๋ ๊ฐ์ผ๋ก
2) 1)๊ณผ ๊ฐ์ด ํ๊ณ shouldComponentUpdate
๋ก ์ฝ๊ฐ์ ํ๋ ์ด๋ฅผ ํ์ญ์์ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋งค์ฐ ๋ณต์กํ๊ณ ์ฝ์ ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ ๋ง์ ์ง๋ฌธ์ด ๋ํ๋ฉ๋๋ค.
3) componentDidUpdate์์ DOM์ ์
๋ฐ์ดํธํฉ๋๋ค. ์ด๊ฒ์ด ๋ด๊ฐ ๊ฒฐ์ ํ ์๋ฃจ์
์ด๋ฉฐ ์๋ํ๋ฉฐ ๊ฐ๋จํ๊ณ ์์ ์ ์ด๋ฉฐ ์๋ํ ๋๋ก ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ด๊ฐ ๊ฐ์ฅ์๋ฆฌ์ ์๋ค๊ณ ๋๋ผ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ผ์ ํ๋ ์ข์ ๋ฐฉ๋ฒ์ธ์ง ๋ค์ ํ์ธํ๊ณ ์ถ์์ต๋๋ค. componentDidUpdate
์์ DOM์ ์กฐ์ํด๋ ๋ฉ๋๊น? render
๊ฐ ์๋ฃ๋ ๋๋ง๋ค ํธ์ถ๋๋ฉฐ ๋ค์ render
DOM์ ๋ค์ ์์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฒ๋ฆฌ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์์ ์ฝ๋์ ์ผ๋ถ์ ๋๋ค.
componentDidMount() {
this.recalculateIndent();
}
componentDidUpdate() {
this.recalculateIndent();
}
recalculateIndent() {
// calculate indent based on getBoundingClientRect of some DOM reference
this.textareaRef.style.textIndent = `${indent}px`;
}
render() {
return (
...
<textarea ref={ref => this.textareaRef = ref}/>
...
);
}
๊ตฌ์ฒด์ ์ธ ์ํฉ์๋ ๊ฐ๊ฐ์ ์๋ฃจ์ (์ปดํฌ๋ํธ ๋ผ์ดํ์ฌ์ดํด ๋ฐฉ์)์ด ์ ํฉํ์ง๋ง DOM ์กฐ์์ ์๋ชป๋ ๊ฒ์ด๋ค. ์ํ๋ฅผ ์ฌ์ฉํ๊ณ ๊ตฌ์ฑ ์์๋ฅผ ๋ค์ ๋ ๋๋งํฉ๋๋ค. ๋ง์ง๋ง ์ฌ์ฉ ์ฌ๋ก "ํ ์ด๋ธ์ ๋ํ ๊ณ ์ ํค๋ + ํ ์ด๋ธ ๋ณธ๋ฌธ์ ๋ํ ๊ฐ์ ์คํฌ๋กค"์ ๋ํ ์์ ๋๋ค. ์ด๊ฒ์ด ์ฌ๋ฐ๋ฅธ ํ๋ฆ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
componentDidUpdate
์ฌ์ฉํ๋ @jvorcak ์ ๋ ๋๋ง ํ DOM์ ์๋์ผ๋ก ์กฐ์ํ๋ ์ฌ๋ฐ๋ฅธ ์์น์
๋๋ค. ๋ฌธ์์ ๋ฐ๋ผ:
๊ตฌ์ฑ ์์๊ฐ ์ ๋ฐ์ดํธ๋์์ ๋ DOM์์ ์์ ํ ์ ์๋ ๊ธฐํ๋ก ์ด๊ฒ์ ์ฌ์ฉํ์ญ์์ค.
๋ํ ๊ธฐ๋ฅ ์์ฒญ ๋ฐ ๋ฒ๊ทธ ๋ณด๊ณ ์์๋ง ๋ฌธ์ ์ถ์ ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค. ์ฌ์ฉ๋ฒ ์ง๋ฌธ์ ํ ๋ก .reactjs.org ๋๋ StackOverflow์ ๊ฐ์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ๋ณด๋ด์ผ ํฉ๋๋ค. ๊ฐ์ฌ ํด์!
๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ฅผ ๋ณ๊ฒฝํ ํ ํ๋์ ๊ตฌ์ฑ ์์๋ฅผ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
componentDidUpdate
์ฌ์ฉํ๋ @jvorcak ์ ๋ ๋๋ง ํ DOM์ ์๋์ผ๋ก ์กฐ์ํ๋ ์ฌ๋ฐ๋ฅธ ์์น์ ๋๋ค. ๋ฌธ์์ ๋ฐ๋ผ:๋ํ ๊ธฐ๋ฅ ์์ฒญ ๋ฐ ๋ฒ๊ทธ ๋ณด๊ณ ์์๋ง ๋ฌธ์ ์ถ์ ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค. ์ฌ์ฉ๋ฒ ์ง๋ฌธ์ ํ ๋ก .reactjs.org ๋๋ StackOverflow์ ๊ฐ์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ๋ณด๋ด์ผ ํฉ๋๋ค. ๊ฐ์ฌ ํด์!