1. 선언형 UI와 명령형 UI의 차이점
2. UI를 선언적인 방식으로 생각하기
UI인터렉션을 디자인할 때 사용자의 행동에 따라 UI가 어떻게 변하는지에 대해서 생각해 보았을 것이다.
사용자가 답변을 제출할 수 있는 양식을 생각해 보자.
명령형 프로그래밍에서 위의 내용은 인터랙션을 구현하는 방법에 직접적으로 해당한다.
방금 일어난 일에 따라 UI를 조작하기 위한 정확한 지침을 작성해야한다.
Illustrated by Rachel Lee Nabors
운전자는 사용자가 어디로 가고 싶은지 모른 채 명령만 따를 뿐이다.
(지시를 잘못 내리면 엉뚱한 곳에 가게 된다!)
컴퓨터에게 스피너부터 버튼까지 각 요소에 “명령”을 내려 컴퓨터에 어떻게 UI를 업데이트할 내용을 지시해야 하므로, 이를 명령형이라고 부른다.
다양한 form 양식으로 가득 찬 페이지를 업데이트 해야 한다고 생각해보자.
새로운 UI 요소나 새로운 인터랙션을 추가하려면 기존의 모든 코드를 주의 깊게 살펴 버그의 발생 여부(예를 들어, 무언가를 표시하거나 숨기는 것을 잊는 등)를 확인해야 한다.
React는 이런 문제를 해결하기 위해 만들어졌다.
React에서는 직접 UI를 조작하지 않는다.
즉, 컴포넌트를 직접 활성화하거나 비활성화 하지도, 보여주거나 숨기지도 않는다.
대신 표시할 내용을 선언하면 React가 UI를 업데이트할 방법을 알아낸다.
Illustrated by Rachel Lee Nabors
위에서 form을 명령형으로 구현하는 방법을 살펴보자.
아래에서는 React로 사고하는 방법을 더 잘 이해하기 위해 이 UI를 React로 다시 구현하는 과정이다.
useState
를 사용하여 메모리의 상태를 표현한다.2-1. 컴포넌트의 다양한 시각적 상태 식별하기
2-2. 상태 변경을 촉발하는 요인 파악하기
Illustrated by Rachel Lee Nabors
두 경우 모두 state 변수를 설정해야 UI를 업데이트할 수 있다.
개발중인 form의 경우 몇 가지 다른 입력에 따라 state를 변경해야한다.
KeyNote
- 사람의 입력에는 종종 이벤트 핸들러가 필요하다.
이 흐름을 시각화하는 데 도움이 되도록 종이에 각 상태가 적힌 원을 그리고 각 상태 사이의 변경 사항을 화살표로 아래와 같이 그려 보자.
이 방식으로 흐름을 파악할 수 있을 뿐 아니라 구현하기 훨씬 전에 버그를 분류할 수 있다.
Form State
2-3. 메모리의 상태를 useState
로 표현하기
const [answer, setAnswer] = useState('');
const [error, setError] = useState(null);
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);
2-4. 비필수적인 state 변수 제거하기
isTyping
과 isSubmitting
은 동시에 true일 수 없다.typing
', 'submitting
', 'success
'.isEmpty
와 isTyping
은 동시에 true가 될 수 없다.isEmpty
를 제거하고 대신 answer.length === 0
으로 확인할 수 있다.isError
는 error !== null
을 대신 확인할 수 있기 때문에 필요하지 않다.const [answer, setAnswer] = useState('');
const [error, setError] = useState(null);
const [status, setStatus] = useState('typing'); // 'typing', 'submitting', or 'success'
2-5. 이벤트 핸들러를 연결하여 state 설정하기
useState
로 상태를 모델링하라.https://developer.mozilla.org/ko/