React/개념

use State, onChange

하로이 2022. 10. 4. 16:27
<!DOCTYPE html>
<html>
  <body>
    <div id="root"></div>
  </body>
  <script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
  <script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
  <script type="text/babel">
    const root = document.getElementById("root");
    function App() {
      const [counter, setCounter] = React.useState(0);
      const onClick = () => {
        //setCounterr(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>
</html>

기존 값에서 새로운 값을 가져오는 것에는 두 가지 방법이 있다.

1. setCounterr(counter +1);

2.setCounter((current) => current + 1);

 

1번 같은 경우에는 초기값을 콕 집어서 +1 씩 증가시켜 주었지만 초기값에 오류가 있을 경우에는 좋지 않으므로 초기값을 가져오는 경우에는 2번 current함수를 불러와서 많이 쓴다.

 

 

<!DOCTYPE html>
<html>
  <body>
    <div id="root"></div>
  </body>
  <script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
  <script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
  <script type="text/babel">
    function App() {
      const [minutes, setMinutes] = React.useState(0);
      const onChange = (event) => {
        setMinutes(event.target.value);
      };
      const reset = () => setMinutes(0);
      return (
        <div>
          <h1> 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)}
              id="hours"
              placeholder="Hours"
              type="number"
              disabled
            />
          </div>
          <button onClick={reset}>Reset</button>
        </div>
      );
    }
    const root = document.getElementById("root");
    ReactDOM.render(<App />, root);
  </script>
</html>

 

1. 이 코드를 작성하면서 배운점은 일단 React에서는 for, class는 javascript에서 이미 선점한 용어이기 때문에 사용하지 못하고 대신 

for = htmlFor

class = className 

이렇게 사용한다.

 

2. input 값 안에 value를 주고 onChange라는 이벤트를 실행시키면 현재 실행(작성) 중인 내용물이 보인다. 작성방법은 아래와 같다.

    function App() {
      const [minutes, setMinutes] = React.useState(0);
      const onChange = (event) => {
        setMinutes(event.target.value);
      };

 

3.  내가 작성하는 숫자에서 나누기 60을 하여 분으로 나타내고 Math.round(minutes / 60) 함수를 사용해서 반올림한다.

그리고 disavled를 사용하면 입력하지 못하게 위 사진처럼 회색으로 만들 수 있다.

 <label htmlFor="hours">Hours</label>
            <input
              value={Math.round(minutes / 60)}
              id="hours"
              placeholder="Hours"
              type="number"
              disabled