Concepts

Nesting components

๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์ง‘ํ•ฉ์ฒด์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ๋ผ ํ•˜๋ฉด UI(User Interface)๋กœ ์ž์‹ ์˜ ๋กœ์ง๊ณผ ์Šคํƒ€์ผ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์•„์ฃผ ์ž‘์€ ๋‹จ์œ„์˜ ๋ฒ„ํŠผ๋ถ€ํ„ฐ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๊นŒ์ง€ ๋‹ค์–‘ํ•˜๋‹ค.

-> Atomic design system๊ณผ ์ž˜ ๋ถ€ํ•ฉํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. 1)

๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋งˆํฌ์—…์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋˜ํ•œ, HTML ํƒœ๊ทธ์™€ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ๋Œ€๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

// JSX ๋‚ด { } escape ๋ฌธ์ž๋ฅผ ํ†ตํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ’๋“ค์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
const Button = ({onClick}) => {
    return (
        <button onClick={onClick}></button>
    )
}

// export default ํ‚ค์›Œ๋“œ๋Š” ํŒŒ์ผ ๋‚ด ๋ฉ”์ธ์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
export default const Page = () => {
    const onClick = () => {
        ...
    }

    return (
        <>
            <h1>Payment</h1>
            <Button onClick={onClick}/>
        </>
    )
}

๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ JSX ํƒœ๊ทธ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†๊ณ  ํ•˜๋‚˜์˜ ๊ฐ์‹ธ์ง„ JSX ํƒœ๊ทธ๋งŒ์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ตฌ์ฒด์ ์œผ๋กœ ์ •ํ•ด์ง„ ๋ฐ”๋Š” ์—†์ง€๋งŒ ๊ฐ€์žฅ ์‰ฝ๊ฒŒ className์„ ํ†ตํ•ด ์Šคํƒ€์ผ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฆฌ์•กํŠธ์—์„œ๋Š” if๋ฅผ ์‚ฌ์šฉํ•ด ๋ Œ๋”๋ง ๋ถ„๊ธฐ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

const Input = ({isLoggedIn, username}) => {
    const content = isLoggedIn ? <Admin /> : <Login />
    
    return(
        <div>
            {content}
            {username && (
                <span>{username}</span>
            )}
        </div>
    )
}

Managing State

Last updated