ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ํ‘œํ˜„์‹๊ณผ ๋ฌธ, ๊ทธ๋ฆฌ๊ณ  React์˜ JSX
    ์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ 2023. 2. 18. 12:38

    1. ํ‘œํ˜„์‹(Expression)

    ํ‘œํ˜„์‹์ด๋ž€ ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ(statement)์ด๋‹ค. ํ‘œํ˜„์‹์ด ํ‰๊ฐ€๋˜๋ฉด ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ฐ’์„ ์ฐธ์กฐํ•œ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ๋“ค์€ ๋ชจ๋‘ ํ‘œํ˜„์‹์ด๋‹ค.

    100; 
    50 + 50; // ๋ฆฌํ„ฐ๋Ÿด & ์—ฐ์‚ฐ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ ํ‰๊ฐ€๋˜์–ด ๊ฐ’ 100์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ํ‘œํ˜„์‹
    score; // ๋ณ€์ˆ˜ ์‹๋ณ„์ž๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋ณ€์ˆ˜ ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋œ๋‹ค. 
    // ์‹๋ณ„์ž ์ฐธ์กฐ๋Š” ๊ฐ’์„ ์ƒ์„ฑํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋˜๋ฏ€๋กœ ํ‘œํ˜„์‹์ด๋‹ค. 
    // ๋ฆฌํ„ฐ๋Ÿด ํ‘œํ˜„์‹
    // ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ํ‰๊ฐ€๋˜์–ด ๊ฐ’์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๊ทธ ์ž์ฒด๋กœ ํ‘œํ˜„์‹
    10
    'Hello'
    
    // ์‹๋ณ„์ž ํ‘œํ˜„์‹(์„ ์–ธ์ด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •)
    // ์‹๋ณ„์ž ์ฐธ์กฐ๋Š” ๊ฐ’์„ ์ƒ์„ฑํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋˜๋ฏ€๋กœ ํ‘œํ˜„์‹
    sum
    person.name
    arr[1]
    
    // ์—ฐ์‚ฐ์ž ํ‘œํ˜„์‹
    10 + 20
    sum = 10
    sum !== 10
    
    // ํ•จ์ˆ˜/๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ‘œํ˜„์‹(์„ ์–ธ์ด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •)
    square()
    person.getName()

    Quiz!

    ๋‹ค์Œ ์•„๋ž˜ JS ์ฝ”๋“œ ์ฒญํฌ์— ๋ช‡ ๊ฐœ์˜ ํ‘œํ˜„์‹์ด ์žˆ์„๊นŒ?

    (5 + 1) * 2

    ๋‹ต : ์ด 5๊ฐœ์ด๋‹ค!

    1) 5
    2) 1
    3) 2
    4) 6
    5) 12

    2. ๋ฌธ (statements)

    ๋ฌธ(statements)์€ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„์ด์ž ์ตœ์†Œ ์‹คํ–‰ ๋‹จ์œ„๋‹ค. ๋ฌธ์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ด๋ค„์ง„ ๊ฒƒ์ด ํ”„๋กœ๊ทธ๋žจ์ด๋ฉฐ, ๋ฌธ์„ ์ž‘์„ฑํ•˜๊ณ  ์ˆœ์„œ์— ๋งž๊ฒŒ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค.

    ๋ฌธ์€ ์—ฌ๋Ÿฌ ํ† ํฐ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ํ† ํฐ์ด๋ž€ ๋ฌธ๋ฒ•์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋ฌธ๋ฒ•์ ์œผ๋กœ ๋” ์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ์˜ ๊ธฐ๋ณธ ์š”์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, ํ‚ค์›Œ๋“œ, ์—ฐ์‚ฐ์ž, ๋ฆฌํ„ฐ๋Ÿด, ์„ธ๋ฏธ์ฝœ๋ก ์ด๋‚˜ ๋งˆ์นจํ‘œ ๋“ฑ์˜ ํŠน์ˆ˜ ๊ธฐํ˜ธ๋Š” ๋ฌธ๋ฒ•์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋ฌธ๋ฒ•์ ์œผ๋กœ ๋” ์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ์˜ ๊ธฐ๋ณธ ์š”์†Œ์ด๋ฏ€๋กœ ๋ชจ๋‘ ํ† ํฐ์ด๋‹ค.

     

    ๋ฌธ์„ ๋ช…๋ น๋ฌธ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. ์ฆ‰, ๋ฌธ์€ ์ปดํ“จํ„ฐ์— ๋‚ด๋ฆฌ๋Š” ๋ช…๋ น์ด๋‹ค. ๋ฌธ์ด ์‹คํ–‰๋˜๋ฉด ๋ช…๋ น์ด ์‹คํ–‰๋˜๊ณ  ๋ฌด์Šจ ์ผ์ธ๊ฐ€๊ฐ€ ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค. ๋ฌธ์€ ์„ ์–ธ๋ฌธ, ํ• ๋‹น๋ฌธ, ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ ๋“ฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

    // ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ
    var x;
    
    // ํ• ๋‹น๋ฌธ
    x = 5;
    
    // ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
    function foo () {}
    
    // ์กฐ๊ฑด๋ฌธ
    if (x > 1) {console.log(x);}
    
    // ๋ฐ˜๋ณต๋ฌธ
    for (var i = 0; i < 2; i++) { console.log(i); }

     

    3. ํ‘œํ˜„์‹๊ณผ ๋ฌธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฒ•

    1. ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด๋ณด๊ธฐ

    var x = var x;  // ๋ณ€์ˆ˜์— ํ• ๋‹น๊ฐ€๋Šฅํ•œ๊ฐ€? ์•„๋‹ˆ๋‹ค! ๊ณ ๋กœ ์„ ์–ธ๋ฌธ์€ ํ‘œํ˜„์‹์ด ์•„๋‹˜
    var x = 100;  // ๋ณ€์ˆ˜์— ํ• ๋‹น๊ฐ€๋Šฅํ•œ๊ฐ€? ๊ทธ๋ ‡๋‹ค! ๊ณ ๋กœ ํ• ๋‹น๋ฌธ์€ ํ‘œํ˜„์‹์ด๋‹ค.

    2. console.log ์ฐ์–ด๋ณด๊ธฐ

    • ๋ชจ๋“  ํ•จ์ˆ˜ ์ธ์ˆ˜๊ฐ€ ํ‘œํ˜„์‹์ด์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ž‘ํ•œ๋‹ค. ํ‘œํ˜„์‹์€ ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ๊ฐ’์ด ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ!
    console.log(์—ฌ๊ธฐ์— ์ฐ์–ด๋ณด๊ธฐ!)
    
    console.log(if(~~~))  // Unexpected token 'if'
    console.log(1+2) // 3

    3. Chrome์—์„œ ์™„๋ฃŒ ๊ฐ’(completion value) ํ™•์ธํ•ด๋ณด๊ธฐ

    • ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ ํ‘œํ˜„์‹์ด ์•„๋‹Œ ๋ฌธ์„ ์‹คํ–‰ํ•˜๋ฉด ์–ธ์ œ๋‚˜ undefined๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ด๋ฅผ ์™„๋ฃŒ ๊ฐ’์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์™„๋ฃŒ ๊ฐ’์€ ํ‘œํ˜„์‹์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๊ทผ ๊ฐ’๊ณผ ๊ฐ™์ด ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์—†๊ณ  ์ฐธ์กฐํ•  ์ˆ˜๋„ ์—†๋‹ค.

    ์ž, ๋‹ค์Œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์€ 'undefined'๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    ๋ฐ˜๋ฉด, ํ‘œํ˜„์‹์ธ ๋ฌธ์„ ์‹คํ–‰ํ•˜๋ฉด ์–ธ์ œ๋‚˜ ํ‰๊ฐ€๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    ** ์งˆ๋ฌธ, var num = 10์€ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์ด์ž ํ• ๋‹น๋ฌธ์ธ๋ฐ ์™œ undefined๋ฅผ ๋ฐ˜ํ™˜ํ• ๊นŒ?
    ์‚ฌ์‹ค, ์œ„์˜ ๋ฌธ์€ ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ํ• ๋‹น์„ ํ•˜๋‚˜์˜ ๋ฌธ์œผ๋กœ ๋‹จ์ถ• ํ‘œํ˜„ํ•ด ๋†“์€ ๊ฒƒ์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ๊ฐ’์˜ ํ• ๋‹น์„ 2๊ฐœ์˜ ๋ฌธ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ๊ฐ ์‹คํ–‰ํ•œ๋‹ค. ๋˜ํ•œ ์ด ๋•Œ ์ฃผ์˜ํ•  ์ ์€ ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ๊ฐ’์˜ ํ• ๋‹น ์‹œ์ ์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ, ๋ณ€์ˆ˜ ์„ ์–ธ์€ ๋Ÿฐํƒ€์ž„ ์ด์ „, ๊ฐ’์˜ ํ• ๋‹น์€ ๋Ÿฐํƒ€์ž„์— ์‹คํ–‰๋œ๋‹ค.

     

    ์œ„์—์„œ undefined๊ฐ€ ๋‚˜์˜จ๊ฒƒ์€ var foo ์ด ๋ถ€๋ถ„๋งŒ ๋จผ์ € ์‹คํ–‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด ์•„๋‹๊นŒ...๐Ÿ˜ฎ ? (์งˆ๋ฌธํ•˜๊ธฐ)

     

    4. React์—์„œ ๊ฐ’ / ํ‘œํ˜„์‹์˜ ์˜๋ฏธ

    React ๊ณต์‹๋ฌธ์„œ์—์„œ expression์„ ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด, JSX์˜ curly braces({ }) ์•ˆ์—์„œ ํ‘œํ˜„์‹์ด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ง์ด ๋‚˜์™€์žˆ๋‹ค.

    Any JavaScript expression will work between curly braces, including function calls like formatDate():

    ๊ทธ๋ฆฌ๊ณ  if ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด conditional Rendering์„ ํ•˜๋„๋ก ํ•ด์ค˜์•ผ ํ•œ๋‹ค๊ณ  ๋˜์–ด ์žˆ๋‹ค.

    if (isPacked) {  
    
    return <li className="item">{name} โœ”</li>;  
    
    }  
    
    return <li className="item">{name}</li>;

    ๋ณดํ†ต ์œ„์™€ ๊ฐ™์€ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์—์„œ ์šฐ๋ฆฌ๋Š” Conditional(ternary) operator(? :) ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

    return (  
    
    <li className="item">  
    
    {isPacked ? name + ' โœ”' : name}  
    
    </li>  
    
    );

    ์œ„์—์„œ ์‚ดํŽด๋ดค๋˜ ๋Œ€๋กœ, if๋ฌธ์€ '๋ฌธ'์ด๋ฉฐ ternary operator๋Š” ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋˜๋Š” 'ํ‘œํ˜„์‹'์ด๋‹ค. ์ฆ‰, React JSX์—์„œ { }์ค‘๊ด„ํ˜ธ ์•ˆ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ํ‘œํ˜„์‹ ๋ฟ์ด๋ผ๋Š” ์†Œ๋ฆฌ์ธ๋ฐ, ์ด๊ฑด ์™œ ๊ทธ๋Ÿด๊นŒ?

    JSX ๋Š” ์‚ฌ์‹ค ๋ฌธ๋ฒ•์  ์„คํƒ•์ด๋‹ค!

    ๊ณต์‹๋ฌธ์„œ์— ๋ณด๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์ ํ˜€์žˆ๋‹ค.

    ๊ทผ๋ณธ์ ์œผ๋กœ, JSX๋Š” React.createElement(component, props, ...children) ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋ฌธ๋ฒ•์  ์„คํƒ•์„ ์ œ๊ณตํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.

    ์‚ฌ์‹ค JSX๋กœ ์“ด ์ฝ”๋“œ๋“ค์€ ๋‚ด๋ถ€์ ์œผ๋กœ React.createElement(component, props, ...children)์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋งŒ๋“ค์–ด ์ง€๋Š” ๊ฒƒ์ด๋‹ค. ์œ„์—์„œ ํ‘œํ˜„ ์‹๊ณผ ๋ฌธ์„ ๊ตฌ๋ถ„ํ•  ๋•Œ, console.log๋กœ ์ฐ์–ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ํ‘œํ˜„์‹, ์•„๋‹Œ ๊ฒƒ์€ ๋ฌธ์ด๋ผ๊ณ  ํ–ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ด์œ ๋Š” ํ•จ์ˆ˜๋Š” ๊ฐ’์„ ์ธ์ž๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ ์ด๋ผ๊ณ  ํ–ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋„ ๊ฐ™์€ ๋งฅ๋ฝ์ด๋‹ค. { }๋กœ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์€ ...children parameter์— ํ•ด๋‹นํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๊ฐ’์„ ๋„˜๊ฒจ์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์— ๋ฌธ์ด ๋“ค์–ด๊ฐ€๋ฉด ํ•จ์ˆ˜ ์‹คํ–‰์— ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.

     

    React.createElement๋ฅผ ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    <MyButton color="blue" shadowSize={2}>
        Click Me
    </MyButton>
    
    React.createElement(MyButton, {color:'blue', shadowSize:2}, 'Click me');
    
    
    <div className = "sidebar" />
    React.createElement('div', {className: 'sidebar'})
    

    Click Me๊ฐ€ createElementํ•จ์ˆ˜์˜ ์„ธ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    Babel compiler์—์„œ ํ•œ๋ฒˆ ๋” ์‚ดํŽด๋ณด์•˜๋‹ค.

    function hello() {
      return <div>{100>1 ? 'minju' : 'ariel'}</div>;
    }
    
    function hello() {
      return /*#__PURE__*/React.createElement("div", null, 100 > 1 ? 'minju' : 'ariel');
    }

    ๋”ฐ๋ผ์„œ { }์•ˆ์—๋Š” ์˜ค๋กœ์ง€ ํ‘œํ˜„์‹๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ , ๋ฌธ์€ ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค!

     

     

    ์ฐธ๊ณ 

    ๋Œ“๊ธ€

Designed by Tistory.