본문 바로가기
Frontend/ReactJS

[Nomad coders] React_응용

by 모너아링 2022. 11. 8.

단위 converter

※ label

<html>
	<label for="minutes">Minutes</label>
    <input id="minutes" placeholder="Minutes" type="number" />
</html>
  • label에 있는 text를 클릭하면 label의 for의 값과 일치하는 id값으로 이동한다.

분 -> 시간

  1. html 요소 구성하기
<html>
<div>
     <h1 className="hi">Super Converter</h1>
     <label htmlFor="minutes">Minutes</label>
     <input 
       id="minutes" 
       placeholder="Minutes" 
       type="number" 
       onChange = {onChange}
     />
     <label htmlFor="hours">Hours</label>
     <input value={minutes} id="hours" placeholder="Hours" type="number" />
</div>
</html>
  • onchange 요소 사용

2. js로 입력값 받은 값으로 minutes을 변경

<script>
	const [minutes, setMinutes] = React.useState();
    const onChange = (event) => {
        setMinutes(event.target.value);
    }
</script>
  • event.target.value 사용

  • Minutes의 값과 Hours의 값은 동일
  • Hours의 값은 수정할 수 없음 => onChange event가 없기 때문

3. Minutes  Hours 로 변경하기

<html>
<input 
    value={minutes / 60} 
    id="minutes" 
    placeholder="Minutes" 
    type="number" 
    onChange = {onChange}
/>
</html>

4. reset 버튼 생성 후 기능 구현

<script>
	const reset = () => setMinutes(0);
</script>

<html>
	<button onClick={reset}>Reset</button>
</html>

시간 -> 분

  • flip 함수 이용
  1. flip 버튼을 클릭하면 hours와 minutes 입력 여부 toggle
<script>
	const [flipped, setFlipped] = React.useState(false);
    const onFlip = () => setFlipped(!flipped);
</script>

<html>
	<input 
         value={minutes} 
         id="minutes" 
         placeholder="Minutes" 
         type="number" 
         onChange = {onChange}
         disabled={flipped === true} //flipped
    />
            
    <input 
         value={Math.round(minutes / 60)} 
         id="hours" 
         placeholder="Hours" 
         type="number" 
         disabled={flipped === false} //!flipped
   />
	<button onClick={onFlip}>Flip</button>
</html>

 

2. 1번 과정 값을 작성할 수 있게 기능 구현

<script>
	const [amount, setAmount] = React.useState(0);
    const onFlip = () => {
        reset(); //flipped 시 값 초기화
        setFlipped(!flipped)
      };
</script>

<html>
	<input 
         value={flipped ? amount * 60 : amount} 
         id="minutes" 
         placeholder="Minutes" 
         type="number" 
         onChange = {onChange}
         disabled={flipped === true} //flipped
    />
            
    <input 
         value={flipped ? amount : Math.round(amount / 60)} 
         id="hours" 
         placeholder="Hours" 
         type="number" 
         disabled={flipped === false} //!flipped
   />
	<button onClick={onFlip}>Flip</button>
</html>
  • flipped 가 true라면 hours 작성가능. 이때, hours(amount) * 60이 minutes 값
  • flipped 가 false라면 minutes 작성가능. 이때, minutes(amount) / 60이 hours 값

단위 converter 응용

  • 분/시간 변환기, 마일/킬로미터 변환기 만들어 고를 수 있게 함 => select 사용
<html>
	function App() {
      const [index, setIndex] = React.useState("xx"); //기본 값 xx
      const onSlect = (event) => {
        setIndex(event.target.value);
      }
      return (
        <div>
          <h1 className="hi">Super Converter</h1>
          <select value={index} onChange={onSlect}> //선택이 변할 때 onChange 작동
            <option value="xx">Select your units</option>
            <option value="0">Minutes & Hours</option>
            <option value="1">Km & Miles</option>
          </select>
          <hr />
          {index === "xx" ? "Please select your units" : null}
          {index === "0" ? <MinutesToHours /> : null}
          {index === "1" ? <KmToMiles /> : null}
        </div>
      );
    }
</html>

=> 컴포넌트 분할

  • 분/시간 변환기를 <MinutesToHours /> 컴포넌트로,
  • 마일/킬로미터 변환기를 <KmToMiles /> 컴포넌트로

'Frontend > ReactJS' 카테고리의 다른 글

[Nomad coders] React_Effects  (0) 2022.11.10
[Nomad coders] React_Props  (0) 2022.11.08
[Nomad coders] React_State  (0) 2022.11.08
[Nomad Coders] React_JSX  (0) 2022.11.08
[Nomad Coders] React_render  (0) 2022.11.08