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모드에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Vue.js】컴포넌트의 3개의 네비게이션 가드일에서 사용하게 되었기 때문에 1부터 Vue.js에 대해 배웠다. 그 이름에서 알 수 있듯이 무언가를 가드하기위한 처리로, 대체로 페이지 천이 전에 특정 처리를 실행시켜 페이지 천이시키지 않게 한다. Vue.js의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.