๐ React ์ ๋ฌธ Xโ ข - Component ๊ฐ State ๊ณต์
๐ React ์
๋ฌธ Xโ
ข - Component ๊ฐ State ๊ณต์
๐
ใ์ํ์ ์ฒ์ ๋ง๋ ๋ฆฌ์กํธใ
๋ฅผ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
Component
๊ฐ State
๊ณต์ ๋?
- ์ด๋ค
Component
์State
๋ฅผ ์ฌ๋ฌ ๊ฐ์ ํ์Component
์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ค์ต
1
2
3
Calculator.jsx
โโโ BoilingVerdict.jsx
โโโ TemperatureInput.jsx
- ์ค์ต ์์ ๊ตฌ์กฐ์ด๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Calculator.jsx
import React, { useState } from "react";
import BoilingVerdict from "./BoilingVerdict";
import TemperatureInput from "./TemperatureInput";
function toCelsius(fahrenheit) {
return ((fahrenheit - 32) * 5) / 9;
}
function toFahrenheit(celsius) {
return (celsius * 9) / 5 + 32;
}
function tryConvert(temperature, convert) {
const input = parseFloat(temperature);
if (Number.isNaN(input)) {
return '';
}
const output = convert(input);
const rounded = Math.round(output * 1000) / 1000;
return rounded.toString();
}
function Calculator(props) {
const [temperature, setTemperature] = useState('');
const [scale, setScale] = useState('c');
const handleCelsiusChange = (temperature) => {
setTemperature(temperature);
setScale('c');
};
const handleFahrenheitChange = (temperature) => {
setTemperature(temperature);
setScale('f');
};
const celsius = scale === 'f' ? tryConvert(temperature, toCelsius) : temperature;
const fahrenheit = scale === 'c' ? tryConvert(temperature, toFahrenheit) : temperature;
return (
<div>
<TemperatureInput
scale="c"
temperature={celsius}
onTemperatureChange={handleCelsiusChange}
/>
<TemperatureInput
scale="f"
temperature={fahrenheit}
onTemperatureChange={handleFahrenheitChange}
/>
<BoilingVerdict celsius={parseFloat(celsius)}/>
</div>
);
}
export default Calculator;
// BoilingVerdict.jsx
import React from "react";
function BoilingVerdict(props){
if (props.celsius >=100){
return <p>๋ฌผ์ด ๋์ต๋๋ค.</p>
}
return <p>๋ฌผ์ด ๋์ง ์์ต๋๋ค.</p>
}
export default BoilingVerdict;
// TemperatureInput.jsx
const scaleNames = {
c : '์ญ์จ',
f : 'ํ์จ'
};
function TemperatureInput(props) {
const handleChange = (event) => {
props.onTemperatureChange(event.target.value);
}
return (
<fieldset>
<legend>
์จ๋๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.(๋จ์:{scaleNames[props.scale]})
</legend>
<input value={props.temperature} onChange={handleChange}/>
</fieldset>
);
}
export default TemperatureInput;
- ๋ถ๋ชจ
Component
์๊ฒ์ ์ ๋ฌ๋props.onTemperatureChange
์์ฑ์ ํตํด ๋ถ๋ชจComponent
์ ์ํฅ์ ์ฃผ๊ณ ์๋ค. - ์ด๋ ๊ฒ ํ์
Component
์ยState
๋ฅผ ๊ณตํต๋ ๋ถ๋ชจComponent
๋ก ๋์ด์ฌ๋ ค์ ๊ณต์ ํ๋ ๋ฐฉ์์ยState
ย ๋์ด์ฌ๋ฆฌ๊ธฐ๋ผ๊ณ ํ๋ค.
ํ๊ณ
- ๊ณตํต
State
๋ฅผ ๋ถ๋ชจComponent
์์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ฝ๋๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ค. - ๊ผญ
React
๊ฐ ์๋๋๋ผ๋ ์ด๋ค ์์ญ์ด๋ ๊ณตํต์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค๋ฉด ๋๋ถ๋ถ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ด ์ข์ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ๋ค.
This post is licensed under CC BY 4.0 by the author.