<star />

์ปดํฌ๋„ŒํŠธ ๋ณธ๋ฌธ

React ๐Ÿ“

์ปดํฌ๋„ŒํŠธ

๋ณ„๊น… 2022. 11. 23. 02:41
728x90

 

 

1. ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ

 

function Welcome(props) {
	return <h1>์•ˆ๋…•, {props.name}</h1>;
}

 

์œ„ ์ฝ”๋“œ์—์„œ Welcome ์ด๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๊ฐ€ props์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์„œ ์ธ์‚ฌ๋ง์ด ๋‹ด๊ธด ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฆฌํ„ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ. ์š”๋ ‡๊ฒŒ ์ƒ๊ธด ๋†ˆ๋“ค์„ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

 

2. ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ์ง“๊ธฐ

 

์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฆ„์€ ํ•ญ์ƒ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ๋จ.

์™œ๋ƒ? ๋ฆฌ์•กํŠธ๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ DOM ํƒœ๊ทธ๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

//HTML div ํƒœ๊ทธ๋กœ ์ธ์‹
const element = <div />;

//Welcome ์ด๋ผ๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ์ธ์‹
const element = <Welcome name="๋ณ„๊น…" />;

 

3. ์ปดํฌ๋„ŒํŠธ์˜ ํ•ฉ์„ฑ

 

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ปดํฌ๋„ŒํŠธ์˜ ํ•ฉ์„ฑ์ด๋‹ค.

๋ฆฌ์•กํŠธ์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ๋˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ณต์žกํ•œ ํ™”๋ฉด์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆ ์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.

 

function Welcome(props) {
	return <h1>์•ˆ๋…•, {props.name}</h1>
}

function App(props) {
	return (
            <div>
                <Welcome name="๋”๋ณด์ด์ฆˆ" />
                <Welcome name="๋‰ด์ง„์Šค" />
                <Welcome name="๋ฅด์„ธ๋ผํ•Œ" />
            </div>
    	)
}

 

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด props์˜ ๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„œ Welcome ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

App์ด๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” Welcome ์ปดํฌ๋„ŒํŠธ ์„ธ ๊ฐœ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋๋‹ค.

 

4. ์ปดํฌ๋„ŒํŠธ ์ถ”์ถœ

 

ํฐ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ผ๋ถ€๋ฅผ ์ถ”์ถœํ•ด์„œ ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.

์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž‘์•„์งˆ์ˆ˜๋ก ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋Šฅ๊ณผ ๋ชฉ์ ์ด ๋ช…ํ™•ํ•ด์ ธ์„œ, props๋„ ๋‹จ์ˆœํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋จ.

๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ณ , ๋‚˜์ค‘์— ๊ณง๋ฐ”๋กœ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

์ถ”์ถœ ๊ณผ์ • ๐Ÿ‘‡๐Ÿป

 

1) ๋Œ“๊ธ€์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ Comment ๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ์ž‘์„ฑ์ž์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€์™€ ์ด๋ฆ„ ๊ทธ๋ฆฌ๊ณ  ๋Œ“๊ธ€ ๋‚ด์šฉ๊ณผ ์ž‘์„ฑ์ผ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ.

 

function Comment(props) {
	return (
    	<div className="comment">
        	<div className="user-info">
                    <img className="avatar"
                        src={props.author.avatarUrl}
                        alt={props.author.name}
                    />
                    <div className="user-info-name">
                        {props.author.name}
                    </div>
                </div>
            
            <div className="comment-text">
            	{props.text}
            </div>
            
            <div className="comment-date">
            	{formatDate(props.date)}
            </div>
        </div>
    )
}

 

2) Avatar ์ถ”์ถœํ•˜๊ธฐ

> props์— author ๋Œ€์‹  ์ข€ ๋” ๋ณดํŽธ์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” user๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž.

 

function Avatar(props) {
	return (
            <img className="avatar"
                src={props.user.avatarUrl}
                alt={props.user.name}
            />
	);
}

 

3) UserInfo ์ถ”์ถœํ•ด์„œ Avatar ์ถ”๊ฐ€ํ•˜๊ธฐ

> props์— author ๋Œ€์‹  ์ข€ ๋” ๋ณดํŽธ์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” user๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž.

 

function UserInfo(props) {
	return (
    	<div className="user-info">
        	<Avatar user={props.user} />
                <div className="user-info-name">
                    {props.user.name}
                </div>
        </div>
    )
}

 

4) ์ถ”์ถœํ•œ ์ปดํฌ๋„ŒํŠธ ์ ์šฉ์‹œํ‚ค๊ธฐ

 

function Comment(props) {
	return (
    	<div className="comment">
        	<UserInfo user={props.author} />
            
                <div className="comment-text">
                    {props.text}
                </div>

                <div className="comment-date">
                    {formatDate(props.date)}
                </div>
        </div>
    )
}

 

> ์ถ”์ถœ๋œ ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ

 

728x90

'React ๐Ÿ“' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง  (0) 2022.11.28
์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง  (0) 2022.11.26
State์™€ ์ƒ๋ช…์ฃผ๊ธฐ  (0) 2022.11.24
Hook  (0) 2022.11.23
Props  (0) 2022.11.23
Comments