<script type="text/babel">
const root = document.getElementById("root");
function App() {
const [counter, setCounter] = React.useState(0);
const onClick = () => {
setCounter(counter + 1);
};
return (
<div>
<h3>Total Clicks : {counter}</h3>
<button onClick={onClick}>Click Me</button>
</div>
);
}
ReactDOM.render(<App />, root);
</script>
그러므로 우리는
current변수를 이용하겠다.
<script type="text/babel">
const root = document.getElementById("root");
function App() {
const [counter, setCounter] = React.useState(0);
const onClick = () => {
//setCounter(counter + 1);
setCounter((current) => current + 1);
};
return (
<div>
<h3>Total Clicks : {counter}</h3>
<button onClick={onClick}>Click Me</button>
</div>
);
}
ReactDOM.render(<App />, root);
</script>

counter 변수에 바로 접근하지 않고 current에 접근할 것이다.그러므로 React.useState(값) 가 우리에게 주는 배열의 인덱스 1의 함수는, current라는 변수를 통해 업데이트가 발생한 인덱스 0의 변수에 접근하는 것이다.
- 이 배열에서 첫 번째 아이템은 value
- 이 배열에서 두 번째 아이템은 value를 수정하고 component를 새로고침 할 때 쓰는 함수
Unit Conversions (단위 변환기)를 만들어 보겠다.
const MyComponent = () => {
return (
<div className="my-container">
<h1>Hello, React!</h1>
<p>This is a JSX component.</p>
</div>
);
}`

<script type="text/babel">
const root = document.getElementById("root");
function App() {
return (
<div>
<h1>Super Converter</h1>
<label for="minutes">Minutes</label>
<input id="minutes" placeholder="Minutes" type="number" />
<label for="hours">Hours</label>
<input id="hours" placeholder="Hours" type="number" />
</div>
);
}
ReactDOM.render(<App />, root);
</script>

그러므로 우리는 JSX가 HTML과 비슷함에도 불구하고 몇 가지 점에서 크게 다르다는 것을 인지한 후에 코드를 작성해야 한다.

한편 React JS에서 input은
uncontrolled라고 알려져 있다.


const [minutes, setMinutes] = React.useState();
<input
value={minutes}
id="minutes"
placeholder="Minutes"
type="number"
onChange={onChange}
/>


event를 넣었다.Synthetic한 이벤트라고 한다. 리액트가 일종의 가짜 이벤트를 발생시켜 우리에게 정보를 보여주는 것이다.




<script type="text/babel">
const root = document.getElementById("root");
function App() {
const [minutes, setMinutes] = React.useState(0);
const onChange = (event) => {
setMinutes(event.target.value);
};
const reset = () => setMinutes(0);
return (
<div>
<h1 className="hi">Super Converter</h1>
<div>
<label htmlFor="minutes">Minutes</label>
<input
value={minutes}
id="minutes"
placeholder="Minutes"
type="number"
onChange={onChange}
/>
</div>
<div>
<label htmlFor="hours">Hours</label>
<input
value={Math.round(minutes / 60)}
//value={minutes / 60}
id="hours"
placeholder="Hours"
type="number"
onChange={onChange}
/>
</div>
<button onClick={reset}>reset</button>
</div>
);
}
ReactDOM.render(<App />, root);
</script>


그런데 나는 이제 시에서 분으로도 바꾸고 싶다 → Flip Function
<script type="text/babel">
const root = document.getElementById("root");
function App() {
const [minutes, setMinutes] = React.useState(0);
const [flipped, setFlipped] = React.useState(false);
const onChange = (event) => {
setMinutes(event.target.value);
};
const reset = () => setMinutes(0);
const onFlip = () => setFlipped((current) => !current);
return (
<div>
<h1 className="hi">Super Converter</h1>
<div>
<label htmlFor="minutes">Minutes</label>
<input
value={minutes}
id="minutes"
placeholder="Minutes"
type="number"
onChange={onChange}
//disabled={flipped === true} // flipped가 true면 disabled
disabled={flipped}
/>
</div>
<div>
<label htmlFor="hours">Hours</label>
<input
value={Math.round(minutes / 60)}
//value={minutes / 60}
id="hours"
placeholder="Hours"
type="number"
onChange={onChange}
//disabled={flipped === false} // flipped가 false면 disabled
disabled={!flipped}
/>
</div>
<button onClick={reset}>reset</button>
<button onClick={onFlip}>Flip</button>
</div>
);
}
ReactDOM.render(<App />, root);
</script>

<script type="text/babel">
const root = document.getElementById("root");
function App() {
const [amount, setAmount] = React.useState(0);
const [flipped, setFlipped] = React.useState(false);
const onChange = (event) => {
setAmount(event.target.value);
};
const reset = () => setAmount(0);
const onFlip = () => setFlipped((current) => !current);
return (
<div>
<h1 className="hi">Super Converter</h1>
<div>
<label htmlFor="minutes">Minutes</label>
<input
value={flipped ? amount * 60 : amount}
id="minutes"
placeholder="Minutes"
type="number"
onChange={onChange}
disabled={flipped}
/>
</div>
<div>
<label htmlFor="hours">Hours</label>
<input
// 우리가 지금 flip되어 있다면 그냥 현재 값만 보여줘
value={flipped ? amount : Math.round(amount / 60)}
id="hours"
placeholder="Hours"
type="number"
onChange={onChange}
disabled={!flipped}
/>
</div>
<button onClick={reset}>reset</button>
<button onClick={onFlip}>Flip</button>
</div>
);
}
ReactDOM.render(<App />, root);
</script>

