React: componentDidMount์˜ ์š”์†Œ๋ฅผ ํ•œ ๋ฒˆ์— ๋‹ค์‹œ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜: null์˜ 'rootID' ์†์„ฑ์„ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 05์›” 10์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/react

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')
);

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ง„์งœ ์งˆ๋ฌธ์€ ์™œ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ 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()๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ๋งˆ์šดํŠธ ๋ฐ ๋งˆ์šดํŠธ ํ•ด์ œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž‘์„ฑ/์‚ฌ์šฉ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

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 /> ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰