React 컴포넌트 분리와 연동된 state 업데이트

TIL

원-달러 환율 변환기를 구현했다.
사용자가 한 화폐 단위의 금액을 입력하면, 사전에 정의된 환율을 사용해 다른 화폐 단위로 변환된 금액을 동시에 보여준다.

구현 과정

컴포넌트 분리

입력 필드를 재사용 가능한 CurrencyInput 컴포넌트로 분리한다.

const CurrencyInput = ({ value, onChange, currencyUnit }) => {
  return (
    <div className="input__box">
      <label htmlFor={currencyUnit}>{currencyUnit}</label>
      <input
        type="number"
        id={currencyUnit}
        min={0}
        value={value}
        onChange={(e) => onChange(currencyUnit, e.target.value)}
      />
    </div>
  );
};
  • currencyUnit: 화폐 단위(krw 또는 usd)를 받아 라벨과 id로 사용한다.
  • value: 현재 입력값을 props로 받아 표시한다.
  • onChange: 입력값이 변경될 때 화폐 단위와 함께 부모 컴포넌트로 전달한다.

 

state 관리

원화와 달러 값을 하나의 객체로 관리한다.

const EXCHANGE_RATE = 1353;

function App() {
  const [state, setState] = useState({
    krw: 0,
    usd: 0,
  });
  • EXCHANGE_RATE: 환율을 상수로 정의한다.
  • state: 원화(krw)와 달러(usd) 값을 객체로 관리한다.

 

환율 변환 로직

입력된 화폐 단위에 따라 다른 화폐로 자동 변환한다.

const onChange = (currencyUnit, value) => {
  if (currencyUnit === "krw") {
    setState({
      ...state,
      krw: value,
      usd: value / EXCHANGE_RATE,
    });
  }
  if (currencyUnit === "usd") {
    setState({
      ...state,
      krw: value * EXCHANGE_RATE,
      usd: value,
    });
  }
};
  • 원화 입력 시: 입력값을 환율로 나눠 달러로 변환한다.
  • 달러 입력 시: 입력값에 환율을 곱해 원화로 변환한다.

 

컴포넌트 렌더링

두 개의 CurrencyInput 컴포넌트를 렌더링하고 각각 다른 화폐 단위를 전달한다.

return (
  <div className="app">
    <h1>환율 변환기 (KRW-USD)</h1>
    <CurrencyInput onChange={onChange} currencyUnit="krw" value={state.krw} />
    <CurrencyInput onChange={onChange} currencyUnit="usd" value={state.usd} />
  </div>
);

 

 

정리

  • 재사용 가능한 컴포넌트는 props로 동작을 제어할 수 있도록 설계한다.
  • 연관된 여러 값은 객체로 묶어 하나의 state로 관리하면 효율적이다.
  • 하나의 입력값 변경 시 연관된 다른 값도 함께 계산해 업데이트할 수 있다.
  • currencyUnit 같은 식별자를 활용하면 동일한 핸들러로 여러 입력을 처리할 수 있다.

'TIL' 카테고리의 다른 글

[CS50] 자료구조 - 연결 리스트 개념과 구현  (0) 2025.11.09
[CS50] 배열의 크기 조정하기  (0) 2025.11.08
React 객체 state 관리와 useRef 활용하기  (0) 2025.11.08
React로 사용자 입력 관리하기  (0) 2025.11.08
[CS50] 메모리 - 파일 입출력  (0) 2025.11.08
'TIL' 카테고리의 다른 글
  • [CS50] 자료구조 - 연결 리스트 개념과 구현
  • [CS50] 배열의 크기 조정하기
  • React 객체 state 관리와 useRef 활용하기
  • React로 사용자 입력 관리하기
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    emotion diary
    memory
    배열
    react
    algorithm
    cs50
    제네릭
    Pages Router
    알고리즘
    Spa
    Trouble Shooting
    App Router
    CS
    함수 타입
    자료구조
    페이지 라우터
    클래스
    Next.js
    ai 감성 일기장
    typescript
    문자열
    javascript
    C
    바닐라 자바스크립트
    타입 좁히기
    앱 라우터
    트러블 슈팅
    useState
    generic
    인터페이스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
React 컴포넌트 분리와 연동된 state 업데이트
상단으로

티스토리툴바