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>
ํ์ดํ ์์ ๋ณ๊ฒฝ