На хостинге gitlab-страниц я размещаю приложение реагировать, а для маршрутизации страниц использую historyRouter. Маршрутизация работает нормально, но когда я перезагружаюсь (нажимаю клавишу f5) или открываю маршрут напрямую, вставляя URL-адрес в адресную строку, сайт теряет свое полное состояние. Это означает, например, что я на myaccount.gitlab / mysite, и я нажимаю любую ссылку, которая перенаправляет меня на myaccount.gitlab / mysite / nextpage, используя этот метод,
this.props.history.push("/nextpage", {
mystate: this.state.mystate
})
Я нажимаю также состояние на этой странице. До сих пор все работает нормально, но если я попытаюсь перезагрузить страницу, я получу страницу emtpy. Отладка в консоли говорит мне, что this.location.state не определено. Я успешно грязно исправил эту проблему, сказав конструктору nextpage, чтобы установить this.location.state к любому значению по умолчанию, если оно не определено или равно нулю. Теперь я могу перезагрузить страницу успешно, но любое состояние исчезло.
Есть что-нибудь, чтобы исправить это поведение? Это только проблема с gitlab? Я могу запустить свое приложение локально в разработке и в производственном режиме на локальном хосте, и нет проблем с потерей состояния или чего-то еще. После некоторого дополнительного кода я использовал:
Gitlab-cli.yml:
test:
image: node:9.6.1
stage: test
script:
- npm install; npm run test
pages:
image: node:9.6.1
stage: deploy
variables:
PUBLIC_URL: "/mypage"
script:
- rm package.json; mv package.json.pages package.json;
npm install;npm install react-scripts@1.1.1 -g;npm run build
- rm -rf public; mv build public
artifacts:
paths:
- public
only:
- master
index.js:
import { Switch, Route, BrowserRouter as Router } from "react-router-dom";
const routing = (
<Router basename={process.env.PUBLIC_URL}>
<div>
<Switch>
<Route exact path="/" component={main} />
<Route path="/nextpage" component={nextPage} />} />
<Route component={PageNotFound} />
</Switch>
</div>
</Router>
);
ReactDOM.render(routing, document.getElementById("root"));