<div> Soup ๐Ÿฅ˜ ํ•ด๊ฒฐํ•˜๊ธฐ

JJ_Deanยท2022๋…„ 12์›” 29์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
9/14
post-thumbnail

div Soup๋ž€?

๋ฐœ์ƒํ•˜๋Š” ์ด์œ 

React๋Š” ์ปดํฌ๋„ŒํŠธ์˜ JSX ์ฝ”๋“œ๊ฐ€ return ํ•œ html ์š”์†Œ๋ฅผ ๋žœ๋”๋งํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ๋‹ค์Œ์ฒ˜๋Ÿผ ํ•œ๋ฒˆ์— ๋‘๊ฐ€์ง€ ์š”์†Œ๋ฅผ ํ•œ๊บผ๋ฒˆ์— return ํ•  ์ˆ˜ ์—†๋‹ค.

return (
    <h2>์ž…๋ ฅ์ฐฝ</h2>
    <form>
      <label>์ด๋ฆ„</label>
      <input type="text"/>
    </form>
  );

๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์„œ ํ•˜๋‚˜์”ฉ return ํ•˜๋ฉด ๊ฐ€๋Šฅํ•˜๊ฒ ์ง€๋งŒ..

return (
	[
    <h2>์ž…๋ ฅ์ฐฝ</h2>
    <form>
      <label>์ด๋ฆ„</label>
      <input type="text"/>
    </form>
    ]
  );


์ปจํ…์ธ  ํ•˜๋‚˜๋งˆ๋‹ค ๋˜ key๋ฅผ ์ง€์ •ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋Ÿฌ์›€์ด ์ƒ๊ธด๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ด ๋‘ ์ปจํ…์ธ ๋ฅผ ๊ฐ์‹ธ๋Š” div๋ฅผ ๋งŒ๋“ค์–ด ํ‘œ๋ฉด์ ์œผ๋กœ๋Š” ํ•˜๋‚˜์˜ ์š”์†Œ๊ฐ€ return ๋˜๊ฒŒ๋” ํ•œ๋‹ค.

return (
  <div>
    <h2>์ž…๋ ฅ์ฐฝ</h2>
    <form>
      <label>์ด๋ฆ„</label>
      <input type="text"/>
    </form>
 </div>
  );

๋žœ๋”๋ง ํ›„ ๋” ํŠธ๋ฆฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋  ๊ฒƒ์ด๋‹ค.

<div>
  <h2>์ž…๋ ฅ์ฐฝ</h2>
  <form>
    <label>์ด๋ฆ„</label>
    <input type="text"/>
  </form>
</div>

ํ•˜์ง€๋งŒ

์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ฐ˜๋ณต๋œ๋‹ค๋ฉด?

์ˆ˜๋งŽ์€ ์š”์†Œ๋“ค์„ ๊ฐ์‹ธ๊ธฐ ์œ„ํ•œ div๋“ค์ด ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ๊ณ„์† ์ค‘์ฒฉ๋  ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ div๊ฐ€ ์ค‘์ฒฉ๋˜๋ฉด

  • ์Šคํƒ€์ผ๋ง์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ถˆํ•„์š”ํ•œ div๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ๋ Œ๋”๋ง ๋˜์–ด ์‚ฌ์ดํŠธ ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค.

์ฒซ ๋ฒˆ์งธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : Wrapper

๋งŒ๋“ค์–ด๋ณด์ž

Wrapper.js ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ props.children๋งŒ return ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์„œ div ์—†์ด Wrapper ์•ˆ์— ์†ํ•œ ์ปจํ…์ธ ๋ฅผ ๋žœ๋”๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

// Wrapper.js
const Wrapper = (props) => {
  return props.children;
};

export default Wrapper;

์œ„์—์„œ ๋งŒ๋“  Wrapper๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž

import Wrapper from './Wrapper.js';
return (
  <Wrapper>
    <h2>์ž…๋ ฅ์ฐฝ</h2>
    <form>
      <label>์ด๋ฆ„</label>
      <input type="text"/>
    </form>
  </Wrapper>
);

form์„ Wrapper๋กœ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ๋กœ์šด div ์ถ”๊ฐ€ ์—†์ด h2 ์™€ form์˜ ์ปจํ…์ธ ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๋žœ๋”๋งํ•  ์ˆ˜ ์žˆ๋‹ค. ๋žœ๋”๋ง ํ›„ ๋” ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋œ๋‹ค.

<h2>์ž…๋ ฅ์ฐฝ</h2>
<form>
  <label>์ด๋ฆ„</label>
  <input type="text"/>
</form>

๋‹จ์ 

  • ํŒŒ์ผ์„ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.
  • ์“ธ ๋•Œ๋งˆ๋‹ค Wrapper.js๋ฅผ import ํ•ด์•ผํ•œ๋‹ค.

๋‘ ๋ฒˆ์งธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : React.Fragment

์จ๋ณด์ž

import React from 'react';

React์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ธ React.Fragment๋Š” ์œ„์—์„œ ๋‹ค๋ฃฌ Wrapper.js์™€ ๋˜‘๊ฐ™์ด ์ž‘๋™ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

return (
  <React.Fragment>
    <h2>์ž…๋ ฅ์ฐฝ</h2>
    <form>
      <label>์ด๋ฆ„</label>
      <input type="text"/>
    </form>
  </React.Fragment>
);

Wrapper.js ํŒŒ์ผ์„ import ํ•˜์ง€ ์•Š๊ณ  React.Fragment ๋งŒ์œผ๋กœ๋„ ์ƒˆ๋กœ์šด div ์ถ”๊ฐ€ ์—†์ด h2 ์™€ form์˜ ์ปจํ…์ธ ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๋žœ๋”๋งํ•  ์ˆ˜ ์žˆ๋‹ค. ๋žœ๋”๋ง ํ›„ ๋” ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋œ๋‹ค.

<h2>์ž…๋ ฅ์ฐฝ</h2>
<form>
  <label>์ด๋ฆ„</label>
  <input type="text"/>
</form>

์žฅ์ 

  • ๋ถˆํ•„์š”ํ•œ div ์ƒ์„ฑ์„ ๋ง‰๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ดํŠธ์˜ ์†๋„๊ฐ€ ๋นจ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ ์–ด์ง„๋‹ค.
  • ์Šคํƒ€์ผ์„ ์ƒ์†๋ฐ›๋Š” ๊ด€๊ณ„์—์„œ ์ค‘๊ฐ„์— div๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์Šคํƒ€์ผ ์š”์†Œ๊ฐ€ ์ ์‘๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š”๋ฐ Fragment๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ๋Ÿด ์ผ์ด ์—†๋‹ค.

์„ธ ๋ฒˆ์งธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : <> </>

<></>๋Š” empty tag, short syntax ๋“ฑ ์—ฌ๋Ÿฌ ์ด๋ฆ„์œผ๋กœ ๋ถˆ๋ฆฐ๋‹ค.

์จ๋ณด์ž

์ด ๋นˆ ํƒœ๊ทธ๋Š” React.Fragment์™€ ๋˜‘๊ฐ™์ด ์ž‘๋™ํ•œ๋‹ค.

return (
  <>
    <h2>์ž…๋ ฅ์ฐฝ</h2>
    <form>
      <label>์ด๋ฆ„</label>
      <input type="text"/>
    </form>
  </>
);

๋” ํŠธ๋ฆฌ๋„ ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™๋‹ค.

๋‹จ์ 

  • <>์ฒ˜๋Ÿผ ํƒœ๊ทธ ์ฆ‰ ๊ด„ํ˜ธ๊ฐ€ ๋น„์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— key๋ฅผ ์ ์„ ์ˆ˜ ์—†๋‹ค.

div soup๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” React.Fragment๊ฐ€ ์ œ์ผ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

profile
๊ณต๋ถ€ํ•˜๊ณ  ๋‚ด ๊ฒƒ์œผ๋กœ ๋งŒ๋“ค์ž.

0๊ฐœ์˜ ๋Œ“๊ธ€