1. Props
- props : properties(์์ฑ)
- ๋จ์ด ๋ป ๊ทธ๋๋ก ์ปดํฌ๋ํธ์ ์์ฑ๊ฐ์ ์๋ฏธ.
- props๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ง๋๊ณ ์๋ ๊ฐ์ฒด
- props๊ฐ์ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ค์ ํ ์ ์๋ค.
- props๋ฅผ ํตํด ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์์ ์ปดํฌ๋ํธ์๊ฒ state์ ์ํ๊ฐ, event handler๋ฅผ ๋๊ฒจ์ค ์ ์๋ค.
2. Props ๊ฐ์ฒด
- ํด๋์คํ ์ปดํฌ๋ํธ์์ props, ์ฆ ์ปดํฌ๋ํธ์ ์์ฑ์ ์ด๋ป๊ฒ ์ ์ํ ๊น?
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;
Parent.js ๋ถ๋ชจ ์ปดํฌ๋ํธ์ด๋ค.(๊ธฐ๋ณธ์ ์ผ๋ก app.js๊ฐ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ด๋ค.)
- ๋ถ๋ชจ ์ปดํฌ๋ํธ ์์์
<Child/> ์ปดํฌ๋ํธ๋ฅผ import ํ <h1> ํ๊ทธ ์๋์ ์์นํด์ฃผ์๋ค.
- ๋ถ๋ชจ์ state์ ์๋ ๋ฐ์ดํฐ๋ฅผ
<Child /> ์ปดํฌ๋ํธ์๊ฒ props๋ฅผ ํตํด ๋๊ฒจ๋ณด๊ฒ ๋ค.
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 ๊ฐ์ฒด๋ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์์ธ๊น?
import React from 'react';
class Child extends React.Component {
render() {
return (
<div>
<h1 style={{color : this.props.titleColor}}>Child Component</h1>
</div>
);
}
}
export default State;
<Child /> ์ปดํฌ๋ํธ ๋ด๋ถ์ <h1> ํ๊ทธ๊ฐ ์๊ณ ํด๋น ํ๊ทธ์ ๊ธ์ ์์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ state ๋ก๋ถํฐ ์ ๋ฌ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํด์ฃผ๋๋ก ํ๋ค.
render ํจ์์ return ํจ์ ์ฌ์ด์์ this.props ๊ฐ์ console.log๋ก ํ์ธ!
- ๊ฒฐ๊ณผ ํ์ธ ์ props ๊ฐ์ฒด ์์ ๋ถ๋ชจ๋ก ๋ถํฐ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๊ฐ key-value ํํ๋ก ๋ด๊ฒจ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
<h1 style={{color : this.props.titleColor}}>Child Component</h1>
- ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ props ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ state ๊ฐ์ฒด์ ์ ๊ทผํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก props ๊ฐ์ฒด์ ํน์ ํค๊ฐ, ์ฆ
this.props.titleColor ์ด๋ ๊ฒ ์์ฑํ๋ฉด ๋๋ค!
3. Props & event
props๋ฅผ ํตํ event handler ์ ๋ฌ
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 ํจ์๋ฅผ ํ์ฉํ๋์ง ์ดํด๋ณด์.
import React from 'react';
class Child extends React.Component {
render() {
return (
<div>
<h1 style={{color : this.props.titleColor}}>Child Component</h1>
<button onClick={this.props.changeColor}>Click</button>
</div>
);
}
}
export default State;
<Child /> ์ปดํฌ๋ํธ ๋ด๋ถ์ <button> ํ๊ทธ๊ฐ ์๋ค.
- ๋ค์์ ์์์ ๋ฐ๋ผ์ ์ฝ๋๊ฐ ์คํ๋๋ค.
<button> ์์์์ onClick ์ด๋ฒคํธ ๋ฐ์
- ์ด๋ฒคํธ ๋ฐ์ ์
this.props.changeColor ์คํ
- props ๊ฐ์ฒด์
changeColor, ์ฆ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ handleColor ํจ์ ์คํ
handleColor ํจ์ ์คํ ์ setState ํจ์ ํธ์ถ - state์ color ๊ฐ์ 'blue' ๋ก ๋ณ๊ฒฝ
render ํจ์ ํธ์ถ
<Child /> ์ปดํฌ๋ํธ์ ๋ณ๊ฒฝ๋ state ๋ฐ์ดํฐ(this.state.color) ์ ๋ฌ
this.props.titleColor ๋ฅผ ๊ธ์ ์์์ผ๋ก ์ง์ ํ๋ <h1> ํ์ดํ ์์ ๋ณ๊ฒฝ