vue-router의hash와history 모드 구분

2738 단어 vue-routerhashhistory
개념
SPA(단일 페이지 응용)를 구축하기 위해서는 전방 루트 시스템을 도입해야 한다. 이것이 바로 Vue-Router의 존재 의미이다.
프런트엔드 루트의 핵심은 보기를 바꾸는 동시에 백엔드에 요청을 하지 않는다는 데 있다.
이러한 목적을 달성하기 위해 브라우저는 현재 다음과 같은 두 가지 지원을 제공합니다.
  1.hash―즉 주소 표시줄 URL의 # 기호 (이hash는 암호학의 산열 연산이 아니다).
예를 들어 이 URL:http://www.abc.com/#/hello,hash의 값은 #/hello입니다.
그것의 특징은 hash가 URL에 나타나지만 HTTP 요청에 포함되지 않고 백엔드에 전혀 영향을 주지 않기 때문에 hash를 바꾸면 페이지를 다시 불러오지 않는다는 것이다.
  2.history - HTML5 History Interface에 추가된pushState () 와replaceState () 방법을 이용했다.
이 두 가지 방법은 브라우저의 역사 기록 창고에 응용되고 현재 존재하는 백,forward,go의 기초 위에서 역사 기록을 수정하는 기능을 제공한다.
다만 수정을 실행할 때 현재 URL이 변경되었지만 브라우저가 백엔드에 바로 요청을 보내지 않습니다.
2. hash 모드
hash 모드의 배후 원리는 onhashchange 이벤트입니다. 윈도우 대상에서 이 이벤트를 감청할 수 있습니다.

window.onhashchange = function(event){
 console.log(event.oldURL, event.newURL);
 let hash = location.hash.slice(1);
 document.body.style.color = hash;
}
이 단락은hash가 바뀔 때 글꼴 색을 바꿀 수 있습니다.
hash가 변화하는 URL은 브라우저에 기록되어 브라우저의 전진 후퇴를 사용할 수 있음을 발견할 수 있습니다. 또한 후퇴를 누르면 페이지 글꼴 색깔도 변화합니다.
이렇게 되면 백엔드에 요청을 보내지 않았지만 페이지 상태는 URL과 연결되어 있습니다. 이것이 바로 백엔드 루트입니다.
3. history 모드
historyapi가 오면서 전방 루트가 진화하기 시작했습니다. 앞의 onhashchange는 #뒤의 URL 세션만 바꿀 수 있고,historyapi는 전방에 완전한 자유를 주었습니다.
historyapi는 전환과 수정의 두 부분으로 나눌 수 있습니다.
전환 역사 상태는 백,forward,go 세 가지 방법을 포함하고 브라우저의 전진, 후퇴, 점프 조작에 대응한다.
수정 역사 상태는pushState,replaceState 두 가지 방법을 포함하고 이 두 가지 방법은 세 가지 매개 변수를 수신합니다:stateObj,title,url

history.pushState({color:'red'}, 'red', 'red')
history.back();
setTimeout(function(){
 history.forward();
 },0)
window.onpopstate = function(event){
  console.log(event.state)
  if(event.state && event.state.color === 'red'){
   document.body.style.color = 'red';
  }
}
pushstate를 통해 페이지의 상태를state 대상에 저장하고, 페이지의 URL이 다시 이 URL로 바뀔 때 이벤트를 통해 저장할 수 있습니다.state에서 이state 대상을 가져와서 페이지 상태를 복원할 수 있습니다. 이곳의 페이지 상태는 바로 페이지 글꼴 색입니다.
사실 스크롤 바의 위치, 읽기 진도, 구성 요소의 스위치의 페이지 상태는state에 저장될 수 있습니다.
4. history 모드의 문제
historyapi를 통해 우리는 추악한 #을 잃어버렸지만, 그것도 문제가 있습니다. 전진도 두려워하지 않고, 후퇴도 두려워하지 않고, 리셋도 두려워하고, f5도 두려워합니다. (백엔드에 준비가 되지 않았다면) 리셋은 서버를 요청하는 것이기 때문입니다.
hash 모드에서 전방 루트는 #의 정보를 수정하고 브라우저가 요청할 때 가져오지 않기 때문에 문제가 없습니다.그러나history에서 path를 자유롭게 수정할 수 있습니다. 새로 고칠 때 서버에 해당하는 응답이나 자원이 없으면 404가 나타납니다.
그래서 서버에 모든 상황을 덮어쓰는 후보 자원을 추가해야 합니다. URL이 정적 자원과 일치하지 않으면 같은 index로 돌아가야 합니다.html 페이지, 이 페이지는 바로 당신의 앱이 의존하는 페이지입니다.
nginx를 사용하는 경우 백엔드 구성은 다음과 같습니다.

location / {
 try_files $uri $uri/ /index.html;
}
이상은 vue-router의hash와history모드를 구분하는 상세한 내용입니다. vue-routerhash와history모드에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

좋은 웹페이지 즐겨찾기