React: React.addons.CSSTransitionGroup์„ ์‚ฌ์šฉํ•˜๋ฉด ์ถ”๊ฐ€ <span>?</span>

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

์—ฌ๊ธฐ์— ์‚ฌ์šฉ์ž ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ECMA2015 + babel์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

return (
            <div className={curtainClasses} style={this.props.curtainClass ? null : curtainStyle} onClick={this.props.clickHandler}>
                <div key="_srm-modal" style={this.props.modalClass ? null : modalStyle} className={modalClasses}>
                    {this.props.children}
                </div>
            </div>
        );

๋ Œ๋”๋ง(๋‚ด ์•ฑ์—์„œ):

<div class="_srm-curtain modal-background" data-reactid=".0.0.1.1.0.0">
    <div class="modal-pod" data-reactid=".0.0.1.1.0.0.$_srm-modal">
        <h1 data-reactid=".0.0.1.1.0.0.$_srm-modal.0">Hello World</h1>
    </div>
</div>

๊ทธ๋Ÿฌ๋‚˜ CSSTransitionGroup์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋ฉด:

    let ReactCSSTransitionGroup = React.addons.CSSTransitionGroup;
        return (
            <div className={curtainClasses} style={this.props.curtainClass ? null : curtainStyle} onClick={this.props.clickHandler}>
                <ReactCSSTransitionGroup transitionName={this.props.transitionName}>
                    <div key="_srm-modal" style={this.props.modalClass ? null : modalStyle} className={modalClasses}>
                        {this.props.children}
                    </div>
                </ReactCSSTransitionGroup>
            </div>
        );

๋‹ค์Œ ์ถ”๊ฐ€ ๋ฒ”์œ„๋กœ โ€‹โ€‹๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

<div class="_srm-curtain modal-background" data-reactid=".0.0.1.1.0.0">
    <span data-reactid=".0.0.1.1.0.0.0">
        <div class="modal-pod" data-reactid=".0.0.1.1.0.0.0.$=1$_srm-modal">
            <h1 data-reactid=".0.0.1.1.0.0.0.$=1$_srm-modal.0">Hello World</h1>
        </div>
    </span>
</div>

๋‚ด๊ฐ€ ๋ญ”๊ฐ€ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜๋ฅผ ๊ฐ€๋ฆฌ์ผœ์ฃผ์„ธ์š”! ๋‚ด๊ฐ€ ๋†“์นœ ๋ฌธ์„œ์— ๋ฉ”๋ชจ๊ฐ€ ์žˆ์—ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!

๊ณ ๋งˆ์›Œ ์–˜๋“ค์•„, ๊ณ„์†ํ•ด์„œ ๋ฉ‹์ง„ ์ผ์„ ํ•ด!

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

์ด ๋ฌธ์ œ๋Š” ์ข…๋ฃŒ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ตฌ์„ฑ ์š”์†Œ ์†์„ฑ์œผ๋กœ React.Fragment๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

<ReactCSSTransitionGroup
    component={React.Fragment}
    transitionName="slide"
    transitionEnterTimeout={500}
    transitionLeaveTimeout={500}
 >
 ....
</ReactCSSTransitionGroup>

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

๋‚˜๋Š” ์ด๊ฒƒ์ด CSSTransitionGroup ์˜ ๋ฌธ์„œํ™”๋œ ๋™์ž‘ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ •๋ง ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค! ๋‚˜๋Š” ๊ทธ ๋ผ์ธ์„ ๋†“์ณค๋‹ค! @garetht

์ด ๋ฌธ์ œ๋Š” ์ข…๋ฃŒ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ตฌ์„ฑ ์š”์†Œ ์†์„ฑ์œผ๋กœ React.Fragment๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

<ReactCSSTransitionGroup
    component={React.Fragment}
    transitionName="slide"
    transitionEnterTimeout={500}
    transitionLeaveTimeout={500}
 >
 ....
</ReactCSSTransitionGroup>
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰