728x90
반응형
학습 주제
- 13장. 리액트 라우터
- 14장. 외부 API 연동하기
- Context API
💡 React Router
- router 기능을 구현하기 위해 외부 라이브러리 필요
- 사용 빈도가 가장 높은 react-router-dom 라이브러리 사용
프로젝트에 라우터 적용
- 프로젝트에 리액트 라우터 적용할 때는 src/index.js 파일에서 react-router-dom에 내장되어 있는 BrowserRouter라는 컴포넌트를 사용하여 감싸면 된다.
- BrowserRouter 컴포넌트는 페이지를 새로고침하지 않고도 주소를 변경하고, 현재 주소에 관련된 정보를 props로 쉽게 조회하거나 사용할 수 있도록 해준다.
- Route 컴포넌트로 어떤 규칙을 가진 특정 주소에 컴포넌트를 연결하여 현재 경로에 따라 다른 컴포넌트를 보여줄 수 있다.
- 이때 root (/) 경로는 다른 하위 경로 규칙에도 일치하기 때문에 exact props를 true로 설정하여 여러개의 컴포넌트가 모두 나타나는 것을 방지해야 한다.
-
<Route path="/" component={Home} exact={true} /> <Route path="/about" component={About} />
Link 컴포넌트
- <a> 태그와 비슷하게 클릭시 다른 주소로 이동시켜주는 기능.
- 리액트 라우터 사용시 a태그를 직접 사용하면 안된다. 이 태그는 페이지를 전환하는 과정에서 페이지를 새로 불러오기 때문에 애플리케이션이 들고 있던 상태들을 모두 날려버린다. 렌더링된 컴포넌트들도 모두 사라지고 다시 처음부터 렌더링한다.
- Link 컴포넌트는 a 태그로 이루어져 있지만 페이지 전환을 방지하는 기능이 내장되어 있다.
- 따라서 url에 따른 화면 렌더링은 <Link> 컴포넌트를 사용하여 구현해야 한다.
URL 파라미터와 쿼리
- url 파라미터
- 라우트로 사용되는 컴포넌트에서 받아 오는 match 객체 안의 params 값을 참조한다.
- match 객체 안에는 현재 컴포넌트가 어떤 경로 규칙에 의해 보이는지에 대한 정보가 있다.
- path 규칙에 "/profile/:username" 이라 넣어주면 match.params.username 값을 통해 현재 username 값을 조회할 수 있음.
- url 쿼리
- 쿼리는 location 객체에 들어있는 search 값에서 조회할 수 있다.
- location 객체는 라우트로 사용된 컴포넌트에게 props로 전달되며, 웹 애플리케이션의 현재 주소에 대한 정보가 있다.
- search 값에서 특정 값을 읽어오기 위해 문자열을 객체 형태로 변환해 주어야한다.
- 쿼리 문자열을 객체로 변환하기 위해 qs 라이브러리 사용
- 쿼리 문자열을 객체로 파싱하는 과정에서 결과 값은 문자열이기 때문에 숫자를 받아와야 하면 parseInt 를 통해 숫자로 변환해 주어야 한다.
history
- 라우트로 사용된 컴포넌트에 match, location과 함께 전달되는 props 중 하나
- 특정 버튼 클릭시 뒤로가거나, 로그인 후 화면을 전환하거나 다른 페이지로 이탈하는것 방지할 때 사용
- 특히 from 전송후 다른 페이지로 이동할 때 사용했음.
withRouter
- 라우트로 사용된 컴포넌트가 아니어도 match, location, history 객체 접근할 수 있게 해주는 함수
- withRouter 사용시 컴포넌트를 내보내 줄때 (export 시) 함수로 감싸주면 된다.
Switch
- 여러 Route를 감싸서 그중 일치하는 단 하나의 라우트만 렌더링 시켜주는 컴포넌트. 실제로 많이 사용중
- switch 사용하면 모든 규칙과 일치하지 않을 때 보여 줄 Not Found 페이지도 구현할 수 있다.
NavLink
- 현재 경로와 Link에서 사용하는 경로가 일치하는 경우 특정 스타일, css 클래스를 적용할 수 있는 컴포넌트
- 메뉴 활성화시 css 처리할 때 사용. style만 지정하면 state로 관리하지 않아도 되기 때문에 편리하다.
💡 API 연동
비동기 작업
- Promise
- 자바스크립트 비동기 처리에 사용되는 객체
- .then을 사용하여 그다음 작업을 설정한다.
- async/await
- Promise를 더욱 쉽게 사용할 수 있도록 해주는 문법
- Promise가 끝날 때까지 기다리고 결과 값을 특정 변수에 담을 수 있다.
axios
- 가장 많이 사용되고 있는 자바스크립트 HTTP 클라이언트 라이브러리
- HTTP 요청을 Promise 기반으로 처리함. return 값이 Promise 객체 형태이다.
API 연동시 유의사항
- useEffect에 등록하는 함수는 async로 작성하면 안된다. useEffect에서 반환해야 하는 값은 뒷정리 함수이고, async/await는 Promise 객체를 반환하기 때문.
- useEffect 내부에서 async/await를 사용하고 싶으면 함수 내부에 async 키워드가 붙은 또 다른 함수를 만들어 사용하면 된다.
💡 Context API
- 전역적으로 사용할 데이터가 있을 때 사용
- 기존에는 최상위 컴포넌트에서 여러 컴포넌트를 거쳐 props로 원하는 상태와 함수를 전달했지만, Context API를 사용하면 Context를 만들어 한번에 원하는 값을 받아 와서 사용 가능하다.
- Redux 대신 Context API를 사용하는것을 권장.
- Context는 createContext 함수를 사용해 만들며, 이 함수를 호출하면 Provider와 Consumer 컴포넌트가 반환된다.
- Provider
- Context에서 사용할 값을 설정할 때 사용. set 역할
- Consumer
- 나중에 설정한 값을 불러와야 할 때 사용. get 역할
- Provider
useContext Hook
- Consumer 대신 리액트 내장 Hook 중 useContext를 사용하는 방법
- 함수형 컴포넌트에서만 사용할 수 있으며 자주 사용되는 패턴
※ 출처 『리액트를 다루는 기술 (개정판)』
320x100
반응형
'Devlog > Front-End' 카테고리의 다른 글
[React.js] Testing Library의 userEvent 사용 시 오류 (Error: Expected key descriptor but found "" in "") (0) | 2022.07.24 |
---|---|
[React] '리액트를 다루는 기술' 스터디_4주차 (JWT의 이해) (0) | 2022.05.27 |
[React] '리액트를 다루는 기술' 스터디_2주차 (Hooks) (0) | 2022.05.27 |
[React] '리액트를 다루는 기술' 스터디_1주차 (0) | 2022.05.27 |
[Vue.js] 컴포넌트 심화 학습_ch.8 (0) | 2022.03.07 |