Sally-Day
BlogAbout

Describing the UI (1)

2023.02.08

React Docs

๐ŸŒ Describing the UI

Your First Component


  • Defining a component

    1. Export the component

      export default prefix๋Š” ๋ฆฌ์•กํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š”๊ฒŒ ์•„๋‹Œ ํ‘œ์ค€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ตฌ๋ฌธ์ด๋‹ค.

    2. Define the function

      function App() { } ์œผ๋กœ App์ด๋ผ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค.

      ๐ŸŒšย ํ•จ์ˆ˜ ์ด๋ฆ„์€ ๋ฐ˜๋“œ์‹œ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค.

    3. Add markup

      JSX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งˆํฌ์—… ์‚ฌ์ด์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

  • Deep Dive: Components all the way down
    ์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” UI์™€ ๋งˆํฌ์—… ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

Importing and Exporting Components


  • The root component file
    ๋ฆฌ์•กํŠธ์—์„œ๋Š” ๋ณดํ†ต src/App.js๊ฐ€ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์ด๊ณ , ์–ด๋–ป๊ฒŒ ์…‹์—…ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ Next.js ๊ฐ™์€ ํŒŒ์ผ ๋ฒ ์ด์Šค ๋ผ์šฐํŒ…์„ ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

  • Exporting and importing a component ๐ŸŒšย import ํ•  ๋•Œ .js ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ ES ๋ชจ๋“ˆ์˜ ์ž‘๋™ ๋ฐฉ์‹์— ๊ฐ€๊น๋‹ค.

    import Gallery from './Gallery.js';

Writing Markup with JSX


  • JSX: Putting markup into JavaScript
    ์›น์ด ๋” interactive ํ•ด์ง€๊ณ , ์ ์  ๋กœ์ง์ด ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ HTML์˜ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์ด ๋ฆฌ์•กํŠธ์—์„œ ๋ Œ๋”๋ง ๋กœ์ง๊ณผ ๋งˆํฌ์—…์ด ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์— ๊ฐ™์ด ์žˆ๋Š” ์ด์œ ์ด๋‹ค.

    • Whatโ€™s a JSX Transform?
      ๋ธŒ๋ผ์šฐ์ €๋Š” JSX๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์•กํŠธ ์œ ์ €๋Š” JSX ์ฝ”๋“œ๋ฅผ ์ผ๋ฐ˜ JavaScript๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” Babel์ด๋‚˜ TypeScript์— ์˜์ง€ํ•œ๋‹ค.
  • The Rules of JSX

    1. Return a single root element

      ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ํƒœ๊ทธ๋กœ ๋ฌถ์–ด์•ผ ํ•œ๋‹ค.

      ๋นˆ ํƒœ๊ทธ์ธ Fragment๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค. Fragment๋Š” ๋ธŒ๋ผ์šฐ์ € HTML ํŠธ๋ฆฌ์— ํ”์ ์„ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ , ์ฆ‰ DOM์— ์ถ”๊ฐ€ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์š”์†Œ๋“ค์„ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

      • Deep Dive: Why do multiple JSX tags need to be wrapped?
        JSX๊ฐ€ HTML์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋œ๋‹ค. ๋ฐฐ์—ด๋กœ wrapping ํ•˜์ง€ ์•Š๊ณ ๋Š” ํ•จ์ˆ˜์—์„œ ๋‘ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ํƒœ๊ทธ๋กœ ๋ฌถ์–ด์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
        return {} {} // ๋ถˆ๊ฐ€๋Šฅ
        return [{}, {}] // ๊ฐ€๋Šฅ
        return (
          <>
            <div className="good">parent</div>
          </>
        );
        compiles into:
        React.createElement(
          React.Fragment,
          null,
          React.createElement(
            'div',
            {
              className: 'good',
            },
            'parent',
          ),
        );
    2. Close all the tags

      ๋‹ซํž˜ ํƒœ๊ทธ๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค. self-closing ํƒœ๊ทธ๋„ <img /> ์ฒ˜๋Ÿผ ๋‹ซํ˜€์•ผ ํ•œ๋‹ค.

    3. camelCase all most of the things!

      JSX๋Š” JavaScript๋กœ ๋ฐ”๋€Œ๊ณ  JSX๋กœ ์ž‘์„ฑ๋œ ์†์„ฑ์€ JavaScript ๊ฐ์ฒด์˜ ํ‚ค๊ฐ€ ๋œ๋‹ค. ์ปดํฌ๋„ŒํŠธ์—์„œ ์ด๋Ÿฌํ•œ ์†์„ฑ์„ ๋ณ€์ˆ˜๋กœ ์“ฐ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, ๋ณ€์ˆ˜ ์ด๋ฆ„์— ๋Œ€ํ•œ ์ œํ•œ์ด ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ฆ„์— ๋Œ€์‹œ(-)๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ class์™€ ๊ฐ™์€ ์˜ˆ์•ฝ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ๋ฆฌ์•กํŠธ์—์„œ๋Š” HTML์™€ SVG์˜ ๋งŽ์€ ์†์„ฑ๋“ค์ด ์นด๋ฉœ์ผ€์ด์Šค๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค.

      ๐ŸŒšย Historical Reason์œผ๋กœ aria-*์™€ data-* ์†์„ฑ์€ ๋Œ€์‹œ๊ฐ€ ์žˆ๋Š” HTML๋กœ ์ž‘์„ฑ๋œ๋‹ค.

JavaScript in JSX with Curly Braces


  • Using โ€œdouble curliesโ€: CSS and other objects in JSX
    CSS style์ด๋‚˜ JavaScript ๊ฐ์ฒด๋Š” curly braces { }๋กœ ํ•œ ๋ฒˆ ๋” ๊ฐ์‹ธ์„œ ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค.

References


Copyright โ“’ 2023 Dayeon Won All rights reserved.
Powered By gatsby-tech-blog