Props
는 컴포넌트간 전달 되지만State
는 컴포넌트 안에서 관리 되고 시간이 지나면서 바뀌는 동적인 데이터다.
State
는 해당State
를 기반으로 동작되는 모든 컴포넌트의 상위 컴포넌트에 존재하는 컴포넌트에 위치 되는게 추천 된다.
리액트 상태
는 크게는범위
와역할
로 나눠 볼 수 있다. 범위의 측면에서 본다면 State가 몇몇 컴포넌트에 국한되서 영향을 주는지역 상태
와 많은 컴포넌트에 영향을 주는전역 상태
로 나눌 수 있다. 지역 상태와 전역 상태의 구분은 상황에 따라 상대적일 수 있다. 역할의 측면에서 본다면 어플리케이션의 인터렉티브한 부분을 컨트롤하는 UI 상태, 서버로부터 데이터를 가져와 캐싱 해놓는 서버 캐시 상태, Form의 로딩, Submitting, disabled, validation 등등 데이터를 다루는 Form 상태, 브라우저에 의해서 관리되고 새로고침해도 변함 없는 URL 상태 등이 있다.
기존의 UI 상태 관리는 MVC (Model-View-Controller) 설계를 써서 UI 를 관리 했었다. 양방향 데이터 흐름을 가지고 있었기 때문에 모델 상태가 바뀌면 뷰가 바뀌며 뷰에서 변경이 일어난다면 다시 모델 상태가 바뀌며 컨트롤러가 이를 조작했다. 모델하나에 의존되는 뷰가 많아지면 많아 질수록 컨트롤러의 복잡도는 더 올라갔고 최신 프론트 웹 개발 트렌드에서 UI 인터렉션이 많아지면서 MVC 설계는 관리가 불가능한 구조가 되었다.
2013년
, MVC 어플리케이션이 가지는 복잡도를 해결하기 위해 단방향 데이터 흐름을 가지는리액트를 릴리즈 하게 된다. 이때는 전역 상태 라이브러리가 존재 하지 않았기 때문에 상위 컴포넌트에서State
를 선언하고 하위 컴포넌트로 Props로 내려주면서 관리 했다. 어플리케이션이 커지면서 점차 래핑되는 컴포넌트도 많았고 State를 전달하기위해서 중간에 있는 관계없는 중간 컴포넌트까지 지나가면서 State를 Props로 전달했다. (이런 문제를 Prop Drilling 이라고 부른다)
2014년
, 페이스북은MVC 패턴의 대안으로 단방향으로 데이터 흐름 진행되는 Flux 패턴을 공개 했다. Flux 패턴은 MVC 패턴에 있던 상태의 전이(뷰와 모델 사이의 데이터 변경이 연결된 수많은 곳으로 따라 변경되는 현상) 현상을 없애주고 예측 가능하다는 특징이있다.
뷰 라이브러리의 발전과 함께 상태가 복잡한 웹 어플리케이션들이 생겨났고 고도화된 전역 상태 관리에 대한 필요성이 생기고 있었다.
2015년에는 Dan Abramov에 의해서React + Flux
의 구조에 Reducer를 결합한 Redux가 등장했다. Redux는 리액트, 앵귤러, 바닐라 js든 다 이용이 가능한 라이브러리이고 리액트와는 react-redux를 이용해서 바인딩 된다. Redux는 리액트의 Prop Drilling 문제와 여러 복잡해지는 상태 공유에 따른 컴포넌트간 의존성 문제를 해결할 대안으로 떠올랐고 금세 상태 관리 라이브러리의 대세가 되었다.
그후 리액트 Hooks가 나왔고 Context API를 이용해서 Prop Drilling 문제 해결, 역할에 따른 상태 분리 등이 가능해졌다. React Query, SWR 등이 나와서 기존에Redux
에 캐싱되어있던 서버 상태를 분리해서 캐싱 하고 있고 최근 리액트 팀은 리액트 전용 전역 라이브러리인 Recoil을 개발중에 있다.
구글 머테리얼 디자인을 기반으로 제작된 UI 라이브러리
리액트와 타입스크립트(Typescript) 기반으로 제작된 UI 라이브러리
알리바바 그룹의 자회사로 핀테크 기술을 개발하는 Ant Financial에서 제공
Segun Adebayo가 만든 React용 최신 구성 요소 UI 라이브러리
Bootstrap을 리액트 기반으로 변경한 UI 라이브러리
React와 firebase로 만든 My-Calendar를 1인 토이프로젝트로 만들며 React에서 상태관리를 어떻게해야 효율적으로 관리할지 많은 생각을 가지게 해준 프로젝트다.
관련 링크 https://velog.io/@jinseoit/React-MyCalendar
항해를 시작한지 4주가 지나 주특기 심화까지의 과정을 마쳤다. 시간이 어떻게 가는지도 모르게 빠르게 흘러간다. 새로 배우는 내용이 많을수록 소화를 잘 해내야 함으로 공부할 시간이 절대적으로 필요하다. 항해 리액트 심화과정 마무리 프로젝트로 (순한맛, 매웃맛)인 (메거진만들기, 캘린더 만들기)중 선택해서 개인프로젝트를 만드는데 개이적으로 둘다 만들고 싶었지만 수요일, 목요일에 몸 컨디션이 좋지않아 둘다 만들지 못한게 개인적으로 너무 아쉽다.
내일부터 드디어 백엔드 분들과 협업하는미니프로젝트
가 시작된다 기본주차, 심화주차때 배운 내용과 개인적으로 공부했던 것들을 쓸 수 있다는점에 너무 기대된다.