Freecodecamp: [๋ฒ ํƒ€] ์ž๋™ ํ์‡„ JSX ํƒœ๊ทธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ

์— ๋งŒ๋“  2018๋…„ 02์›” 13์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: freeCodeCamp/freeCodeCamp



๋„์ „ ์ด๋ฆ„

์ž๋™ ํ์‡„ JSX ํƒœ๊ทธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ

๋ฌธ์ œ ์„ค๋ช…


์ฃผ์„์„ ์ œ๊ฑฐํ•˜๊ณ  ํƒœ๊ทธ๋ฅผ ๋‹ซ์€ ๋‹ค์Œ (์ฒซ ๋ฒˆ์งธ ์‹œ๋„์—์„œ br ํƒœ๊ทธ๊ฐ€ ๋ˆ„๋ฝ ๋œ ํ›„ ์ˆ˜์ • ๋จ) ์‹œ๋„๊ฐ€ ์‹คํŒจํ–ˆ์ง€๋งŒ ํ•ญ๋ชฉ์ด ํŽ˜์ด์ง€์— ๋ Œ๋”๋ง๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์‹คํŒจ ์ถœ์ฒ˜ : ์ œ๊ณต๋œ JSX ์š”์†Œ๋Š” ID๊ฐ€ challenge-node ์ธ DOM ๋…ธ๋“œ์—์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋ Œ๋”๋ง๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์ด ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์‹  ํ•  ๋•Œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์—์„œ ํ•ญ๋ชฉ์ด ๋ Œ๋”๋ง๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ฑŒ๋ฆฐ์ง€ ๋…ธ๋“œ ID๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฃจํŠธ ID๋กœ ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋œ ์ฝ”๋“œ : ReactDOM.render(JSX, document.getElementById('challenge-node'));
ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ–ˆ์œผ๋ฉฐ ์ด์ œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์—์„œ ๋‘ ๋ฒˆ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

์ฑŒ๋ฆฐ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ํŽธ์ง‘๊ธฐ์—์„œ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ JSX์ด๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ํŠธ๋žœ์Šค ํŒŒ์ผ๋˜๋„๋กํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ํƒœ๊ทธ๊ฐ€ ํ•„์š”ํ•œ ๊ณณ์—๋งŒ ํƒœ๊ทธ๋ฅผ ๋‹ซ์œผ๋ฉด๋ฉ๋‹ˆ๋‹ค.

DOM์— ์ฒจ๋ถ€ ํ•  ํ•„์š”๋Š” ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ณ  ์ค„ ๋ฐ”๊ฟˆ๊ณผ ๊ฐ€๋กœ์ค„ ๋งŒ ์กฐ์ •ํ•˜๋ฉด๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…:
DOM์— ๋ Œ๋”๋ง ํ•  ๋ฐฉํ–ฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ˜„์žฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ œ๊ฑฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋˜๋Š” ๋ฃจํŠธ ID ๋Œ€์‹  ์ฑŒ๋ฆฐ์ง€ ๋…ธ๋“œ์—์„œ ๋ฒ—์–ด๋‚˜๋„๋ก ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์กฐ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์•„๋‹ˆ๋ฉด ํ˜„์žฌ ์ƒ๊ฐํ•  ์ˆ˜์—†๋Š” ๋˜ ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์ฝ”๋“œ

Failed:
const JSX = (
  <div>
    <h2>Welcome to React!</h2><br />
    <p>Be sure to close all tags!</p>
    <hr />
  </div>
);

Passed: 
const JSX = (
  <div>
    <h2>Welcome to React!</h2><br />
    <p>Be sure to close all tags!</p>
    <hr />
  </div>
);
ReactDOM.render(JSX, document.getElementById('challenge-node'));

help wanted learn

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

๋ฌธ์ œ๋ฅผ ์‹ ๊ณ  ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! DOM์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉํ–ฅ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ชจ๋“  React DOM ์š”์†Œ ๊ณผ์ œ์˜ ๋™์ž‘๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด์ „์˜ ์ฑŒ๋ฆฐ์ง€ JSX์—์„œ HTML ํด๋ž˜์Šค ์ •์˜ ์—์„œ๋Š” ์ฑŒ๋ฆฐ์ง€๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ฐ ReactDOM.render ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@TJBarrettJR ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ์— ReactDOM.render ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‘ ๋ฒˆ ๋ Œ๋”๋ง ํ•œ ์ด์œ ๋Š” ์‹œ๋“œ ์ฝ”๋“œ๊ฐ€ freeCodeCamp์—์„œ ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ์‹ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ์—๋Š” "๋ณธ๋ฌธ"์ฝ”๋“œ์™€ "๊ผฌ๋ฆฌ"์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ผฌ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž ์ฝ”๋“œ ์•ž์— ์ถ”๊ฐ€๋˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ReactDOM.render ํ–‰์„ ํฌํ•จํ•˜๋ฏ€๋กœ ๋‘ ๋ฒˆ์˜ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ Œ๋” ๋ผ์ธ (์•„๋ž˜ ํ‘œ์‹œ)์€ ํ˜„์žฌ ์†”๋ฃจ์…˜์œผ๋กœ ์‹œ๋“œ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ReactDOM.render(JSX, document.getElementById('challenge-node'));

๋˜ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์„ ์ˆ˜์ •ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” PR์„ ์—ฝ๋‹ˆ ๋‹ค.

ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค. challenge-node id๋Š” HTML ์š”์†Œ๋ฅผ DOM์— ๋ Œ๋”๋งํ•˜๋Š” ์—ฐ์Šต์šฉ์œผ๋กœ ์˜ˆ์•ฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋“œ ํŒŒ์ผ์—์„œ ์–ด๋–ป๊ฒŒ ๋๋‚ฌ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ React ์ฑŒ๋ฆฐ์ง€์—์„œ์ด ๋ถˆํ•„์š”ํ•œ ReactDOM.render[ing] ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒƒ์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ jkao1 ์ด ๋‘ ๋ฒˆ ๋ Œ๋”๋ง ๋œ ์ด์œ ๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ง€๊ธˆ๊นŒ์ง€ ๋‚˜๋Š” ๋‹ค๋ฅธ ๋„์ „๊ณผ ํ•จ๊ป˜ ํ‰๋ฒ”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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