목차
목차1. React 소개1. React 개요1-1. 특징1-2. 리액트는 어떻게 공부해야할까?2. CRA와 JSX2-1. CRA2-2. JSX3. 컴포넌트3-1. UI를 추상적으로 사용/생각하기4. 분기와 반복4.1 리액트에서의 분기 처리4.2 리액트에서의 반복처리5. UseEffect와 UseRef5-1. UseEffect5-2 useRef
1. React 소개
1. React 개요
1-1. 특징
- 왜 React 일까?
- Reactive Programming
반응형 프로그래밍
- 엑셀, 스프레드 시트의 계산(B4 + A3)
- ↔ 명령형 프로그래밍
- MVC 패턴 중 V (View) 만을 컴포넌트를 통해 관리
- 컴포넌트
- 재사용 가능한 독립적인 객체
- 런타임 시점에 사용
- 미리 만들어두고, 런타임에 조립하듯이 사용
HTML
+Style
+JavaScript
+Event
+State
의 결합체- 컴포넌트 끼리 관계를 맺으며, 트리구조로 형성
- VirtualDom
- 필요한 부분만 한 번에 렌더링 한다.
주의
직접 DOM을 조작하는 것 보다 성능이 빠르지 않다.- 다만 실제 case에서 사용하기에 충분히 빠르다는 것
- 성능보다는 개발의 편리성을 위해 도입했다고 할 수 있다.
- 성능최적화를 정말 빡세게한 js > 일반 virtualDOM > 성능관리 안한 js
코드로 DOM 트리를 표현한 것
1-2. 리액트는 어떻게 공부해야할까?
라이브러리나 프레임워크는 우리를 괴롭히기 위해 나온 것이 아니다.
Easy to learn, Hard to master
- 한 번에 너무 깊은 수준 부터 전부 배우려고 하면 지치기 마련, 반복되는 학습을 통해 master 하는 것을 권장
- 첫 출발은 컴포넌트에 포커스를 맞추어 보기
- 처음부터 재사용성과 확장성을 고려하는 것 쉽지 않다.
- 눈에 보이는 UI 부터 시작하여, UI를 추상적으로 바라보는 법 배우기
- 많이 보는 것보다 많이 치는 것이 중요하다.
2. CRA와 JSX
2-1. CRA
- 설치
$npx create-react-app
2-2. JSX
JS내에서 가상돔을 조금 더 편하게 만들기 위한 React만의 문법
- HTML 형식과 유사하도록 작성
- JS :
React.createElement(”’div”, {className:’App’})
- JSX :
<div className=”App”> </div>
주의
최상위 요소는 반드시 1개여야함- React에서 가상돔을 최적화하기 위한 방법
<>, </>
fragment로 감싸주면 실제 DOM에 렌더링 되지 않고 감쌀 수 있다.
- 표현식을 사용하기 위해서는 중괄호 처리
{name}
{isShow && <img src=”www.naver.com” />}
{name === ‘outwater’ ? <h1>Welcome</h1> : <h1>Error !!</h1>}
3. 컴포넌트
3-1. UI를 추상적으로 사용/생각하기
- UI들의 공통점을 찾는 것이 재사용의 시작이다.
- Icon + Text 형식의 JSX로 넘기는 방식을 떠올릴 수 있다.

- 컴포넌트의 분류
- 너무 깊이 고민하지 말고, 점차 규칙을 정하는 것!
- 보통 팀에 의해 하나의 규칙이 적용됨
- Domain을 기준으로 분류하기
- 역할로 분류하기
- Header, List, … ,
- 크기로 분류하기
- Atomic 디자인
React 홈페이지의 FAQ

- 리액트에서 컴포넌트는 “함수”다.
- props를 받아서 JSX를 반환하는 함수
만들 수 있는 최선으로 컴포넌트를 만들고, 자주 리팩토링 하자!
4. 분기와 반복
JSX 내부
에서는 표현식만 사용가능
하여, if문과 for문의 사용이 어렵
기 때문에,
분기처리를 위해 논리곱 연산자와 삼항연산자, 반복을 위해 map, filter등의 고차함수를 활용한다.4.1 리액트에서의 분기 처리
- 논리곱 연산자 사용
visible && <h1>Can See Content</h1>
- 삼항연산자 사용
visible ? <h1>Can See Content</h1> : null
4.2 리액트에서의 반복처리
- map을 통해 배열형태로 만들어 JSX를 반복처리할 수 있다.
- 반복시에는 성능최적화를 위해 고유한 값을 key로 설정해주어야 한다.
5. UseEffect와 UseRef
5-1. UseEffect
- 사용사례1
- reactive한 프로그래밍을 하여
- 사용사례2
- 전역에 대한 이벤트를 등록할 때,
- 반드시 제거처리를 해주어야홤
- useEffect내부에서 함수를 리턴할 경우 제거 처리 가능
5-2 useRef
- 1) DOM에 직접 접근할 때 사용
- useRef() 로 변수에 할당한다음, jsx에서 ref속성으로 연결하여 준다
const inputRef = useRef(); <input ref={inputRef} />;
- 컴포넌트 외부에서 ref를 받아 동적으로 주입하는 것도 가능 (공식문서)
- React.forwardRef
- 첫번째 인자로 props를 두번째 인자로 ref를 받아, 하위 컴포넌트로 넘겨줄 수 있다.
Ref 전달하기는 일부 컴포넌트가 수신한ref
를 받아 조금 더 아래로 전달(즉, “전송”)할 수 있는 옵트인 기능입니다.
- 2) 지역변수로 사용할 때 사용
- useState와 다른 점
- useState는 값이 변경될 때, 렌더링을 다시한다.
- useRef 사용 시 변경되어도, 리렌더링을 하지 않느다.
- 렌더링에 관계없는 값을 관리할 때 사용