componentDidMount ํจ์์์ ReactDOM.render #container element(top-level) ๋ฅผ ์ํํฉ๋๋ค. React ๋ null ์ 'rootID' ์์ฑ์ ์ฝ์ ์ ์๋ค๋ ์ค๋ฅ๋ฅผ ํ์ํฉ๋๋ค.
setTimeout์ ์ฌ์ฉํ๋ฉด ReactDOM.render๋ฅผ ์คํํ๋ฉด ๋ฉ๋๋ค. (0ms ํ์๋)
ํ์ ์ด ์์ง ์์ต๋๋ค. ๋๊ตฐ๊ฐ ๋๋ฅผ ๋์์ค ์ ์์ต๋๊น?
HTML:
<!DOCTYPE html>
<html>
<head>
<title>React</title>
</head>
<body>
<div id="container"></div>
<script type="text/javascript" src="script/lib/react.js"></script>
<script type="text/javascript" src="script/lib/react-dom.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>
<script type="text/javascript" src="script/bundle.js"></script>
</body>
</html>
A.jsx ๋ฐ B.jsx:
var A = React.createClass({
componentDidMount: function(){
ReactDOM.render(
<B />,
document.getElementById('container')
);
},
render: function(){
return (
<div>Hello World, I'm A.</div>
)
}
});
var B = React.createClass({
render: function(){
return (
<div>Hello World, I'm B.</div>
)
}
});
์ฑ.jsx:
ReactDOM.render(
<A />,
document.getElementById('container')
);
jsfiddle์์ ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์ต๋๊น? https://jsfiddle.net/L3zn8dws/
์ง์ง ์ง๋ฌธ์ ์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋ ๋ด์์ ReactDOM.render
๋ฅผ ํธ์ถํ๋ ๊ฒ์
๋๊น? ํ์ฌ ๊ตฌ์ฑ ์์๊ฐ ํ์ฌ๋ ๋
ธ๋์ ์ ๊ตฌ์ฑ ์์๋ฅผ ํ์ฌํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋ ์ํฐ ํจํด์ฒ๋ผ ๋ณด์
๋๋ค.
๋ฃจํธ์์ ๋ค์ ๋ง์ดํธํ๋ ๋์ ๋ฃจํธ ์์ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋๋งํ ๊ตฌ์ฑ ์์๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ์ฌ๋ฌ ๊ฐ์ React ๋ฃจํธ๊ฐ ์ ๋์ ์ผ๋ก ์์ด์ผ ํ๋ ๊ฒฝ์ฐ(์ ๋ง ์ข์ ์ด์ ๊ฐ ์์ด์ผ ํจ) ์ผ์ข ์ ๋์ฐ๋ฏธ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
https://facebook.github.io/react/blog/2015/10/01/react-render-and-top-level-api.html#helpers
์ฌ๋ฌ React ๋ฃจํธ๊ฐ ์๊ฑฐ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ญ์ ๋๋ ๋จ์ผ ๋ฃจํธ๊ฐ ์๋ ๊ฒฝ์ฐ ํญ์ ๊ณ ์ ํ ๋ํผ API๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๊ฒ๋ค์ ๋ชจ๋ ์ธ๋ถ ์์คํ ์ด ์ด๋ป๊ฒ ์๊ฒผ๋์ง์ ๋ฐ๋ผ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ๋ณด์ผ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด Facebook์๋ ์๋์ผ๋ก ํ์ด์ง ์ ํ ๋ผ์ฐํฐ์ ์ฐ๊ฒฐํ์ฌ ์๋์ผ๋ก unmountComponentAtNode๋ฅผ ํธ์ถํ๋ ์์คํ ์ด ์์ต๋๋ค.
๋ชจ๋ ๊ณณ์์ ReactDOM.render()๋ฅผ ์ง์ ํธ์ถํ๋ ๊ฒ๋ณด๋ค ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ๋ง์ดํธ ๋ฐ ๋ง์ดํธ ํด์ ๋ฅผ ๊ด๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ/์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
์ด๊ฒ์ ์ง์๋์ง ์๋ ํจํด์ฒ๋ผ ๋ณด์ ๋๋ค. ์๋ช ์ฃผ๊ธฐ๊ฐ ํ์ฌ ์คํ ์ค์ธ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๊ฐ ์ด๋ฏธ ํฌํจ๋ ์ปจํ ์ด๋์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ ๋๋งํ๋ ค๊ณ ํฉ๋๋ค.
B
๋ฅผ ํ์ํ๋ ค๋ฉด A
<B />
๋ฅผ ํฌํจํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ง์ง ์ง๋ฌธ์ ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋ ๋ด์์
ReactDOM.render
๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋๊น? ํ์ฌ ๊ตฌ์ฑ ์์๊ฐ ํ์ฌ๋ ๋ ธ๋์ ์ ๊ตฌ์ฑ ์์๋ฅผ ํ์ฌํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋ ์ํฐ ํจํด์ฒ๋ผ ๋ณด์ ๋๋ค.๋ฃจํธ์์ ๋ค์ ๋ง์ดํธํ๋ ๋์ ๋ฃจํธ ์์ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋๋งํ ๊ตฌ์ฑ ์์๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ์ฌ๋ฌ ๊ฐ์ React ๋ฃจํธ๊ฐ ์ ๋์ ์ผ๋ก ์์ด์ผ ํ๋ ๊ฒฝ์ฐ(์ ๋ง ์ข์ ์ด์ ๊ฐ ์์ด์ผ ํจ) ์ผ์ข ์ ๋์ฐ๋ฏธ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
https://facebook.github.io/react/blog/2015/10/01/react-render-and-top-level-api.html#helpers
๋ชจ๋ ๊ณณ์์ ReactDOM.render()๋ฅผ ์ง์ ํธ์ถํ๋ ๊ฒ๋ณด๋ค ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ๋ง์ดํธ ๋ฐ ๋ง์ดํธ ํด์ ๋ฅผ ๊ด๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ/์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.