๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JavaScript/React

[React] Props & Event

by ์ฝ”๋”ฉํ•˜๋Š” ๋ถ•์–ด 2021. 11. 18.
๋ฐ˜์‘ํ˜•

๐Ÿ’ฃ Props

properties(์†์„ฑ). ๋‹จ์–ด ๋œป ๊ทธ๋Œ€๋กœ ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ๊ฐ’.

๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ด๋‹ค.

  • props๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ state์˜ ์ƒํƒœ๊ฐ’, event handler๋ฅผ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค.
    ์ฆ‰, props๋Š” ๋ถ€๋ชจ์—์„œ ์ž์‹์œผ๋กœ ๋ณด๋‚ด์ฃผ๋Š” ์†์„ฑ์ด๋‹ค.

State์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด๋ณด๋ฉด ๋”์šฑ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค!.. ๊ณ  ํ•œ๋‹ค



 

๐Ÿ’ฃ Props ๊ฐ์ฒด

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ props, ์ฆ‰ ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

// Parent.js

import React from 'react';
import Child from '../pages/Child/Child';

class Parent extends React.Component {
  constructor() {
    super();
    this.state = {
      color: 'red'
    };
  }

  render() {
    return (
      <div>
        <h1>Parent Component</h1>
     โญ๏ธ <Child />
      </div>
    );
  }
}

export default State;

 

 

์ด์ œ ๋ถ€๋ชจ์˜ state์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ <Child /> ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ props๋ฅผ ํ†ตํ•ด ๋„˜๊ฒจ๋ณด๋„๋ก ํ•˜์ž.

// Parent.js

import React from 'react';
import Child from '../pages/Children/Children';

class Parent extends React.Component {
  constructor() {
    super();
    this.state = {
      color: 'red'
    };
  }

  render() {
    return (
      <div>
        <h1>Parent Component</h1> 
     โญ๏ธ <Child titleColor={this.state.color}/>
      </div>
    );
  }
}

export default State;
  • ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ props ๋กœ titleColor ์†์„ฑ์„ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๋‹ค.
  • titleColor์˜ ๊ฐ’์œผ๋กœ this.state.color, ์ฆ‰ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ state ๊ฐ์ฒด ์ค‘ color ๊ฐ’์„ ์ „๋‹ฌํ•ด์ฃผ์—ˆ๋‹ค.
  • ๐Ÿ”ฅ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ props๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ state ๊ฐ’์„ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์Œ์œผ๋ก  <Child /> ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ „๋‹ฌ ๋ฐ›์€ props ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

 

 

 

๐Ÿงจ props ๊ฐ์ฒด

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

// Child.js

import React from 'react';

class Child extends React.Component {
  render() {
		// console.log(this.props);

    return (
      <div>
     โญ๏ธ <h1 style={{color : this.props.titleColor}}>Child Component</h1>
      </div>
    );
  }
}

export default State;
<h1 style={{color : this.props.titleColor}}>Child Component</h1>

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

์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ props ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” state ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ props ๊ฐ์ฒด์˜ ํŠน์ • ํ‚ค ๊ฐ’, ์ฆ‰ this.props.titleColor ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.



 

๐Ÿ’ฃ Props & event

๐Ÿ‘‡๐Ÿป props๋ฅผ ํ†ตํ•œ event handler ์ „๋‹ฌ

// Parent.js

import React from 'react';
import Child from '../pages/Children/Children';

class Parent extends React.Component {
  constructor() {
    super();
    this.state = {
      color: 'red'
    };
  }

  handleColor = () => {
    this.setState({
      color: 'blue'
    })
  }

  render() {
    return (
      <div>
        <h1>Parent Component</h1>
     โญ๏ธ	<Child titleColor={this.state.color} changeColor={this.handleColor}/>
      </div>
    );
  }
}

export default State;
  • props ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด state ๋ฐ์ดํ„ฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ถ€๋ชจ์—์„œ ์ •์˜ํ•œ event handler ํ•จ์ˆ˜๋„ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • props์˜ changeColor ๊ฐ’์œผ๋กœ Parent ํ•จ์ˆ˜์—์„œ ์ •์˜ํ•œ handleColor ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ๋‹ค.

 

 

<Child /> ์ปดํฌ๋„ŒํŠธ์—์„œ ์–ด๋–ป๊ฒŒ props๋กœ ์ „๋‹ฌ๋ฐ›์€ handleColor ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด์ž.

// Child.js

import React from 'react';

class Child extends React.Component {
  render() {
		// console.log(this.props);

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

export default State;

๐Ÿ‘‰๐Ÿป ๋‹ค์Œ์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

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

๋Œ“๊ธ€