Computer/react
211027 리액트 입문 SPA
COCSOS
2021. 10. 27. 01:28
일주일만에 다시 리액트를 공부한다.
대학교를 다니며 알바를 하며 장학금을 받는 대학생들이 갑자기 존경스러워진다.
#SPA란?
우선 npx create-react-app 으로 프로젝트 기본 환경 세팅
Single Page Application 이다.
기존의 사이트가 Multi Page application이라면, SPA는 한 페이지로 이루어져있다.
한페이지란, 한번 페이지를 로딩한 뒤로는 뒤로가기를 눌러도 새로 HTML 페이지를 로딩하지 않는다는 말.
그러면 브라우져 뒤로가기, 앞으로가기를 누르면 어떻게 하라구?
# useEffect
useEffect( ()=>{
window.onpopstate = function (event){
setPageName(event.state);
};
}, {});
를 통해 브라우저의 버튼 이벤트를 자바스크립트로 보내 state를 처리하게 만든다.
자세한것은 더 공부하기
# 자바스크립트를 통해 페이지를 이동시켜보자
function App(){
const [pageName,setPageName] = useState('');
function onClick1(){
const pageName ='page1';
window.history.pushState(pageName, '', '/page1');
setPageName(pageName);
}
function onClick2(){
const pageName ='page2';
window.history.pushState(pageName, '', '/page2');
setPageName(pageName);
}
return (
<div>
<button onClick={onClick1}>page1</button>
<button onClick={onClick2}>page2</button>
{!pageName && <Home />}
{pageName === 'page1' && <Page1 />}
{pageName === 'page2' && <Page2 />}
</div>
)
onClick을 지정하여 pushState()를 호출시킨다.
setPageName을 지정해주고 있는데,
state를 변경하면 동적으로 알아서 App()이 변경되나?
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
# react-router-dom으로 SPA 만들기
페이지 정보에 따라 어떤 컴포넌트를 렌더링할지
onpopstate 호출시 상태 정보 변경
+
코드 spliting 제공 (너무 js하나에 몰리면 초기 페이지가 느릴수있다)
우선 npx create-react-app 으로 프로젝트 기본 환경 세팅을 하고
npm install react-router-dom 를 마저 설치한다.