C. State 관리하기

State를 사용해 Input 다루기

React: 선언형 UI 조작

<aside> 💡

React의 핵심 철학: UI는 상태의 결과이다

</aside>

React는 명령형이 아닌 선언형으로 UI를 조작한다 따라서 현재 상태에 UI가 어떤지에 대해 초점을 맞춘다. 즉 기존과 같이 DOM 조작을 위해 명령형으로 코드를 작성할 필요가 없어진다.

UI를 선언적인 방식으로 생각하기

폼을 제출하는 예시에서 선언적으로 UI를 작성하는 방법에 대해서 보자

  1. 컴포넌트의 다양한 시각적 state 확인하기 UI가 사용자에게 보여줄 경우의 수를 확인해 아래의 경우를 생각해 볼 수 있다.

  2. 무엇이 state 변화를 트리거하는지 알아내기 Input을 트리거 하는 방법은 사용자의 인터렉션에 의한 휴먼 인풋 그리고 네트워크 응답, 타임아웃에 의한 컴퓨터 인풋이 있다.

    image.png

    폼을 제출하는 경우 state의 변경은 아래 경우에서 발생할 수 있다.

  3. 메모리의 state를 useState로 표현하기  useState를 활용해 이전에 정의했던 내용을 state로 표현한다. state는 움직이는 조각이며 적게 정의 될 수록 좋다.

    이전 단계에서 정의한 부분을 정리하면 아래와 같이 state가 정리된다. 가능하면 모든 경우를 정리하고 추후에 좁혀나가며 정리하는 식으로 진행한다

    const [isEmpty, setIsEmpty] = useState(true);
    const [isTyping, setIsTyping] = useState(false);
    const [isSubmitting, setIsSubmitting] = useState(false);
    const [isSuccess, setIsSuccess] = useState(false);
    const [isError, setIsError] = useState(false);
    
  4. 불필요한 state 변수를 제거하기 아래 리스트를 보며 불필요한 state를 제거한다.

    const [answer, setAnswer] = useState('');
    const [error, setError] = useState(null);
    const [status, setStatus] = useState('typing');
    
  5. state 설정을 위해 이벤트 핸들러를 연결하기  state 설정을 위해 이벤트 핸들러를 연결한다


State 구조 선택하기

State 구조화를 위한 5가지 원칙

state를 작성할 때는 다음 5가지 원칙을 지킨다. 연관된 state 그룹화하기, State의 모순 피하기, 불필요한 state 피하기, State의 중복 피하기, 깊게 중첩된 state 피하기

1. 연관된 state 그룹화 하기

마우스의 좌표 x와 y를 추적하는 state가 있다고 할 때 state를 정의하는 방법에는 두 가지가 있을 것이다