관리 메뉴

프론트엔드 정복하기

React에서 여러개의 input state 관리하기(useReducer 이용) 본문

React/hooks

React에서 여러개의 input state 관리하기(useReducer 이용)

GROWNFRESH 2020. 7. 7. 11:27

useReducer를 사용하여 여러 개의 인풋 상태를 관리할 수 있다.

 

기존에는 인풋이 여러 개여서 useState 를 여러번 사용했다.

useReducer를 사용한다면 우리가 기존에 클래스형 컴포넌트에서 input 태그에 name 값을 할당하고 e.target.name 을 참조하여 setState 를 해준 것과 유사한 방식으로 작업을 처리 할 수 있다.

 

//info.js

import React, { useReducer } from 'react';

function reducer(state, action) {
  return {
    ...state,
    [action.name]: action.value
  };
}

const Info = () => {
  const [state, dispatch] = useReducer(reducer, {
    name: '',
    nickname: ''
  });
  const { name, nickname } = state;
  const onChange = e => {
    dispatch(e.target);
  };

  return (
    <div>
      <div>
        <input name="name" value={name} onChange={onChange} />
        <input name="nickname" value={nickname} onChange={onChange} />
      </div>
      <div>
        <div>
          <b>이름:</b> {name}
        </div>
        <div>
          <b>닉네임: </b>
          {nickname}
        </div>
      </div>
    </div>
  );
};

export default Info;

useReducer에서의 액션은 그 어떤 값이 되어도 된다.

그래서 이번에 우리는 이벤트 객체가 지니고있는 e.target 값 자체를 액션 값으로 사용했다.

 

이런 식으로 인풋을 관리하면, 아무리 인풋의 개수가 많아져도 코드를 짧고 깔끔하기 유지 할 수 있습니다.

 

 

참고사이트

https://velog.io/@velopert/react-hooks