๐ฃ 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> ํ์ดํ ์์ ๋ณ๊ฒฝ
'JavaScript > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] React๋? (0) | 2021.11.18 |
---|---|
[React] State & Event (0) | 2021.11.18 |
[React] map ํจ์ ์ ์ฉ์ key props๋ฅผ ๋ถ์ฌํ๋ ์ด์ (0) | 2021.11.18 |
HTML, CSS ์ฝ๋๋ฅผ React๋ก ๋ณํํ ๋ ์ฃผ์ํ ์ (0) | 2021.11.17 |
์ฃผ์ ์ฌ์ฉ๋ฒ (0) | 2021.11.16 |
๋๊ธ