Guidebook
ComponentsStorybook

React · Thinking in React

React로 사고하기

화면을 component hierarchy로 나누고 최소 state와 단방향 data 흐름을 설계합니다.

1. 화면 분해

design의 시각적 묶음과 data model의 책임을 함께 보며 component boundary를 찾습니다. 한 component가 지나치게 많은 역할을 맡지 않도록 하되 단순 wrapper까지 모두 추상화하지 않습니다.

2. 정적 화면 만들기

먼저 data를 props로 전달해 interaction 없는 화면을 만듭니다. 이 단계에서 component를 선택하고 DOM, variant와 접근성 계약을 확인합니다.

3. 최소 State 찾기

시간에 따라 바뀌고 다른 값에서 계산할 수 없는 정보만 state입니다. 원본 목록에서 filter된 결과처럼 계산 가능한 값은 render 중에 구합니다.

4. State 위치 정하기

해당 값을 읽는 모든 component의 가장 가까운 공통 parent가 state를 소유합니다. server cache, URL state와 form state는 수명과 소유자가 다르므로 하나의 store에 섞지 않습니다.

5. 역방향 event 연결

data는 parent에서 child로 내려가고 user event는 callback을 통해 owner에게 올라갑니다. Input의 value와 onChange, Vue의 modelValue와 update:modelValue도 같은 소유 원칙을 따릅니다.

검토 질문

  • 같은 상태를 두 곳에 저장하고 있지 않은가?
  • component 이름과 prop이 업무 의미를 드러내는가?
  • loading, empty, error와 disabled 상태가 빠지지 않았는가?
  • keyboard와 screen reader 흐름이 시각 순서와 일치하는가?

공식 문서

가이드북소개기초디자인 토큰기초접근성컴포넌트기본 요소컴포넌트레이아웃컴포넌트폼컴포넌트네비게이션컴포넌트데이터 표시컴포넌트피드백컴포넌트기타활용 가이드UI 패턴활용 가이드작성 지침프레임워크프레임워크 구현프레임워크Gulp프레임워크GulpGulp 시작프레임워크GulpGulp 기본 설정프레임워크GulpGulp 기본 API프레임워크GulpHTML 편집 (Gulp NJK)프레임워크GulpWeb Server & Watching Files프레임워크GulpAssets 세팅프레임워크Gulp배포 (Deploying)프레임워크Vue프레임워크Vue빠른 시작프레임워크Vue핵심 기초프레임워크Vue상태와 반응성프레임워크Vue컴포넌트 심화프레임워크Vue페이지와 라우팅프레임워크Vue재사용성프레임워크Vue내장 컴포넌트프레임워크Vue확장하기프레임워크Vue베스트 프랙티스프레임워크VueTypeScript프레임워크Vue추가 주제프레임워크React프레임워크React빠르게 시작하기프레임워크ReactUI 표현프레임워크React조건과 목록프레임워크React상호작용프레임워크React페이지와 라우팅프레임워크ReactState 관리프레임워크React탈출구프레임워크ReactReact로 사고하기프레임워크WebSquare프레임워크WebSquare스튜디오프레임워크WebSquare화면과 이벤트프레임워크WebSquare컴포넌트프레임워크WebSquareDataCollection프레임워크WebSquareSubmission프레임워크WebSquare사용하기프레임워크WebSquareSP5 설정프레임워크WebSquare심화 가이드프레임워크Svelte프레임워크Svelte빠른 시작프레임워크Svelte핵심 기초프레임워크Svelte상태와 반응성프레임워크Svelte컴포넌트 심화프레임워크Svelte페이지와 라우팅프레임워크SvelteTypeScript프레임워크Svelte베스트 프랙티스프레임워크SolidJS프레임워크SolidJS빠른 시작프레임워크SolidJSUI 표현프레임워크SolidJSSignals와 Effects프레임워크SolidJS컴포넌트 심화프레임워크SolidJS페이지와 라우팅프레임워크SolidJS베스트 프랙티스프레임워크Qwik프레임워크Qwik빠른 시작프레임워크Qwik컴포넌트프레임워크Qwik상태와 반응성프레임워크Qwik페이지와 라우팅프레임워크Qwik베스트 프랙티스프레임워크Remix프레임워크Remix빠른 시작프레임워크RemixUI 표현프레임워크Remix페이지와 라우팅프레임워크RemixLoader와 Action프레임워크Remix베스트 프랙티스프레임워크Angular프레임워크Angular빠른 시작프레임워크Angular핵심 기초프레임워크Angular상태와 반응성프레임워크Angular컴포넌트 심화프레임워크Angular페이지와 라우팅프레임워크AngularTypeScript프레임워크Angular베스트 프랙티스프레임워크Astro프레임워크Astro빠른 시작프레임워크Astro페이지와 라우팅프레임워크AstroIslands프레임워크Astro컴포넌트 통합프레임워크Astro베스트 프랙티스