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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바