donaricano-btn

브라우저 히스토리 vs 해시 히스토리



1. 해시 히스토리

- #기호를 사용하여 페이지를 다시 불러오지않고 탐색한다.

- router/#/posts/http2

- 대부분의 단일 페이지 애플리케이션이 해시를 사용하여 페이지를 완전히 새로고침 하지 않고 앱의 변경을 반영한다.

- 구형 브라우저 구현이 필요하다면 추천한다.

1) 사용법

-  history를 초기화할 때 queryKey 를 false 로 설정하여 성가신 쿼리 스트링(?_k=vl8reh)방지한다

- queryKey 는 오래된 브라우저를 지원하고 탐색할 때 상태를 전달하기 위해 설정된 기본값이다.


2. 브라우저 히스토리

- 해시 히스토리는 url에 #값이 표시된다. 브라우저 히스토리는 이를 방지한다

- router/posts/http2

- 서버측의 설정이 필요하다.

- 브라우저 히스토리는 해시를 사용하지 않는 실제 url 를 사용하기 때문에 각각의 요청이 서버로 전송된다.  그렇기에 어떤 url 이든 같은 파일로 응답하도록 한다.

1) 사용법


블로그 이미지

리딩리드

,
donaricano-btn

react-router 고차 컴포넌트인 withRouter 사용


1. withRouter

- 컴포넌트에서 router 에 접근하는 방법 중 하나이다.

- 정적 클래스 속성인 contextTypes 를 설정하여 this.context.router 로 접근하는 방법 보다는 withRouter 로 접근하는 방법을 선호한다.

- withRouter 는 고차 컴포넌트로 컴포넌트를 인자로 받아 router 에 주입하고 다른 컴포넌트를 반환한다.


2. 사용예

1) 컴포넌트에서 접근

- 함수의 첫 번째 인자로 전달된 객체의 속성을 통해 router 객체에 접근한다.


블로그 이미지

리딩리드

,
donaricano-btn

react-router 사용하기


1. react-router

- 리액트의 공식 라이브러리는 아니다. 그러나 react 개발자들의 1/3 정도 사용하고 있다.


2. 프로젝트 구성

1) 폴더

/css

/js

-bundle.js

/jsx

- about.jsx

- app.jsx

- contact.jsx

- posts.jsx

- post.jsx

/node_modules

index.html

package.json

posts.js ----> 데이터

webpack.config.js

2) index.html

3) package.json

- webpack, history 등 상당히 낮은 버전을 사용하고 있다(주의)

- history 는 버전 2.x  에서 지원이 종료되어  대신 context.router 를 사용할 수 있다. 

4) webpack.config.js

5) Content.jsx

-  부모 Route로 정의될  Content 컴포넌트이다.

- isActive() : true/false 를 반환하며 router 의 상태를 알 수 있다.

- contextType : this.context.router를 사용할 수 있도록 정적 클래스 속성인 contextType을 정의 해야한다. router 를 필수(require) 로 설정해 놓으면 this.context.router.isActive('/about')로 접근할 수 있게 되어 특정 경로가 활성화 되었음을 알 수 있다.

- Link : 내비게이션 링크 생성

- {this.props.children} : 자식 컴포넌트를 렌더링한다.

6) about.jsx

7) posts.jsx

- post 에 있는 데이터 리스트를 화면에 출력한다.

8) post.jsx

개별 데이터를 불러와서 화면에 노출한다.

- 매개 변수로 데이터를 전달한다.

- this.props.NAME 을 이용하여 다양한 정보에 접근이 가능하다(location, history, params, route, routeParams, routes)

9) post.js

- 데이터



블로그 이미지

리딩리드

,
donaricano-btn

react router 처음부터 만들기


1. 정의

- 리액트에서 사용할 라우터를 직접 만들어 본다.


2. 프로젝트 설정

1) 폴더 구조

/js

-bundle.js

/jsx

- app.jsx

-router.jsx

/node_modules

index.html

package.json

webpack.config.js

2) package.json

3) webpack.config.js

4) app.jsx

- mapping 객체로 URL 맵핑을 생성한다.

- mapping 객체를 Router 에 전달 한다.

5) router.jsx

- Router 컴포넌트는 URL 정보를 받고, 속성으로 전달 받은 mapping 객체를 통해 jsx 를 연결한다.

- 브라우저 API 인 window.location.hash 를 통해 url 에 접근한다.

- hashchange :  해당 이벤트를 통해 url 변화를 감지한다.

- render() : if/else 를 통하여 경로를 분기 처리 한다.

6) index.html

- npm run build 


블로그 이미지

리딩리드

,