output: {
publicPath: '/', // dist 폴더 안에 index.js에 /bundle.js 이렇게 절대경로로 표시됨.
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
}
라우팅에 성공했지만 뭔가 이렇게해도 되나 싶은 생각이...?
import { HashRouter } from 'react-router-dom';
ReactDOM.render(
// 자식 컴포넌트들이 리덕스 스테이트에 접근 가능해진다
<Provider store={store}>
<HashRouter>
<App />
</HashRouter>
</Provider>,
document.querySelector('#root')
);
위와같이 블로그에 나와있는거보니 이방법도 아닌거 같다..
서버에 GET 요청을 보내지 않고도 앱이 URL을 조작 할 수 있기 때문이다.
historyApiFallback:true
추가하기구글 검색창에 react router url 직접 입력
이라고 검색해보았더니 벨로퍼트님의 글이..!!!! 뭔가 답을 찾을수 있을거같은 느낌..!
위의 글에서 5. 서버 사이드 설정
부분에서 답을 찾을 수 있었따..!
devServer: {
contentBase: path.join(__dirname, 'dist'),
compress: true,
port: 8888,
historyApiFallback: true, // 이부분..!!!
},
devServer
의 historyApliFallback
옵션이 무슨 역할을 하는지 궁금해서 찾아보는 과정에서 문제의 원인도 알게 되었다. => React-router 2.0 browserHistory doesn't work when refreshing
👉 [키워드 : 리액트 라우터 404 새로고침]
서버에 존재하지 않는 /login
에 GET
을 보내기 때문이다.
브라우저가 서버에 요청을 보내지 못하게하는 다른 방법이 필요하다.
http://localhost:8888/
대한 GET
및 http://localhost:8888/about
에 대한 GET
은 http://localhost:8888/
로 fallback
하고 react-router
는 /login
을 처리해줘야 한다.
위와 같이 해주려면 history api fallback
이라는 webpack
기능을 구현해야한다.
package.json
의 scripts
아래와같은 설정 추가 "start": "webpack-dev-server --inline --content-base . --history-api-fallback"
dev server
에서 처리하도록 webpack.config.js
파일을 변경 devServer: {
historyApiFallback: true,
...other stuff..
},
HTML5의 History API를 사용하는 경우에 설정해놓은 url 이외의 url 경로로 접근했을때 404 responses를 받게 되는데
이때도 index.html
을 서빙할지 결정하는 옵션이다. React와 react-router-dom을 사용해 프로젝트를 만들때도 react-router-dom이 내부적으로 HTML5 History API를 사용하므로 미지정 경로로 이동했을때, 있는 경로지만 그 상태에서 refresh를 했을때와 같은 경우에도 애플리케이션이 적절히 서빙될 수 있어서 유용한 옵션이다.
historyApiFallback : true
사용 X
historyApiFallback : true
사용 O