[React] Props & Event

๐Ÿ™‹๐Ÿปโ€โ™€๏ธยท2022๋…„ 5์›” 13์ผ
0

wecode

๋ชฉ๋ก ๋ณด๊ธฐ
33/40

๐Ÿฉ1. Props

โ–ช๏ธ props: properties(์†์„ฑ)
โ–ช๏ธ ๋‹จ์–ด ๋œป ๊ทธ๋Œ€๋กœ ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ๊ฐ’์ด๋‹ค.
โ–ช๏ธ props๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ด๋‹ค.
โ–ช๏ธ props๋ฅผ ์ด์šฉํ•ด ์–ด๋–ค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ’์ด๋“  ๋ชจ๋‘ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.(๋ณ€์ˆ˜, state๊ฐ’, event handler ๋“ฑ)
โ–ช๏ธ {{ }} : ๊ฒ‰ ์ค‘๊ด„ํ˜ธ๋Š” html์„ jsx์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ.
์† ์ค‘๊ด„ํ˜ธ๋Š” ๊ฐ์ฒด


๐Ÿฉ2. Props ๊ฐ์ฒด

โ–ช๏ธ ์œ„์—์„œ props๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ผ๊ณ  ํ•˜์˜€๋‹ค.
โ–ช๏ธ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ props, ์ฆ‰ ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•˜๋Š”์ง€ ๋ณด์ž

// Parent.js

import React, { useState } from 'react';
import Child from '../pages/Child/Child';

function Parent() {
 const [color, setColor] = useState('red');

 return (
  <div>
   <h1>Parent Component</h1>
   <Child />
  </div>
  ;
 }

 export default Parent;

โ–ช๏ธ Parent.js ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.
โ–ช๏ธ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ <Child /> ์ปดํฌ๋„ŒํŠธ๋ฅผ import ํ›„ <h1>ํƒœ๊ทธ ์•„๋ž˜์— ์œ„์น˜ํ•ด์ฃผ์—ˆ๋‹ค.
โ–ช๏ธ ๋ถ€๋ชจ์˜ state์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ <Child /> ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ props๋ฅผ ํ†ตํ•ด ๋„˜๊ฒจ๋ณด๋„๋ก ํ•˜์ž.

// Parent.js

import React, { useState } from 'react';
import Child from '../pages/Child/Child';

function Parent() {
 const [color, setColor] =  useState('red');

return (
 <div>
  <h1>Parent Component</h1>
  <Child titleColor={color} />
 </div>
);

export default Parent;

โ–ช๏ธ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ props๋กœ titleColor์†์„ฑ์„ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๋‹ค.
โ–ช๏ธ titleColor์˜ ๊ฐ’์œผ๋กœ color, ์ฆ‰ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ state์ธ color๊ฐ’์„ ์ „๋‹ฌํ•ด์ฃผ์—ˆ๋‹ค.
โ–ช๏ธ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ props๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ state ๊ฐ’์„ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
โ–ช๏ธ <Child />์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ „๋‹ฌ ๋ฐ›์€ props ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž

โœ๏ธprops ๊ฐ์ฒด

โ–ช๏ธ ์ปดํฌ๋„ŒํŠธ์˜ props๋Š” ๊ฐ์ฒด์ด๋‹ค.
โ–ช๏ธ Child.js๋‚ด๋ถ€์—์„œ props ๊ฐ์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋„๋ก ํ•˜์ž

// Child.js

import React from 'react';

function Child(props) {
 // console.log(props);

 return (
  <div>
   <h1 style={{color : props.titleColor}}>Child Component</h1>
  </div>
 );
}
export default Child;

โ–ช๏ธ <child /> ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— <h1>ํƒœ๊ทธ๊ฐ€ ์žˆ๋‹ค
โ–ช๏ธ ํ•ด๋‹น ํƒœ๊ทธ์˜ ๊ธ€์ž ์ƒ‰์ƒ์„ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ state๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•ด์ฃผ๋„๋ก ํ•˜์ž
โ–ช๏ธ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ถ€๋ชจ๊ฐ€ ์ „๋‹ฌํ•œ props๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค.
โ–ช๏ธ return๋ฌธ ์œ„์—์„œ props๊ฐ’์„ console.log๋กœ ํ™•์ธํ•œ๋‹ค.
โ–ช๏ธ ๊ฒฐ๊ณผ ํ™•์ธ ์‹œ props ๊ฐ์ฒด ์•ˆ์— ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๊ฐ€ key-value ํ˜•ํƒœ๋กœ ๋‹ด๊ฒจ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

<h1 style={{color : props,titleColor}}>Child Component</h1>

// props :  ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ props ๊ฐ์ฒด
// props.titleColor : props ๊ฐ์ฒด์˜ ํŠน์ • key(titleColor)๊ฐ’. ์ฆ‰ "red"

โ–ช๏ธ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ props ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” props ๊ฐ์ฒด์˜ ํŠน์ • ํ‚ค๊ฐ’, ์ฆ‰ props.titleColor ์ด๋ ‡๊ฒŒ ์ž‘์„ฑ
โ–ช๏ธ ๋‹ค์Œ์œผ๋กœ๋Š” props ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ์—์„œ ์ •์˜ํ•œ event handler๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์ž


๐Ÿฉ3. Props & event

โœ๏ธprops๋ฅผ ํ†ตํ•œ event handler ์ „๋‹ฌ

// parent.js

import React, { useState } from 'react';
import Child from '../pages/Child/Child';

function Parent() {
 const [color, setColor] = useState('red');

 return (
  <div>
   <h1>Parent Componetn</h1>
   <Child titleColor={color} changeColor={() => setColor('blue')} />
  </div>
 );

export default Parent;

โ–ช๏ธ props ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด state ๋ฐ์ดํ„ฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ถ€๋ชจ์—์„œ ์ •์˜ํ•œ event handler ํ•จ์ˆ˜๋„ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค.
โ–ช๏ธ props์˜ changeColor๊ฐ’์œผ๋กœ Parent ํ•จ์ˆ˜์—์„œ ์ •์˜ํ•œ setColor ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ๋‹ค.
โ–ช๏ธ <Child /> ์ปดํฌ๋„ŒํŠธ์—์„œ ์–ด๋–ป๊ฒŒ props๋กœ ์ „๋‹ฌ๋ฐ›์€ handleColor ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด์ž

// Child.js

import React from 'react';

function Child(props) {
  return (
   <div>
     <h1 style={{color : props.titleColor}}>Child Component</h1>
     <button onClick={props,changeColor}>Click</button>
   </div>
  );
 }

export default Child;

โ–ช๏ธ <child /> ์ปดํฌ๋„ŒํŠธ ๋ฐฐ์šฐ์— <button>ํƒœ๊ทธ๊ฐ€ ์žˆ๋‹ค.
โ–ช๏ธ ๋‹ค์Œ์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค
โ–ช๏ธ <button>์š”์†Œ์—์„œ <onClick> ์ด๋ฒคํŠธ ๋ฐœ์ƒ
โ–ช๏ธ ์ด๋ฒคํŠธ ๋ฐœ์ƒ
โ–ช๏ธ props ๊ฐ์ฒด์˜ changeColor, ์ฆ‰ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ setColorํ•จ์ˆ˜ ์‹คํ–‰
โ–ช๏ธ setColor ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ state์˜ color๊ฐ’์ด blue๋กœ ๋ณ€๊ฒฝ
โ–ช๏ธ <Child />์ปดํฌ๋„ŒํŠธ์— ๋ณ€๊ฒฝ๋œ state ๋ฐ์ดํ„ฐ (color)์ „๋‹ฌ
โ–ช๏ธ props.titleColor๋ฅผ ๊ธ€์ž ์ƒ‰์ƒ์œผ๋กœ ์ง€์ •ํ•˜๋Š” <h1>ํƒ€์ดํ‹€ ์ƒ‰์ƒ ๋ณ€๊ฒฝ

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