Pretty geneti c Приложение React / Spring Boot здесь. Никакой безопасности. Нет apis. Всего 2 страницы. На одной странице показан мир привет, на другой - проверка слов. есть меню, в котором вы можете переключаться между ними. Почему-то работает, только если я нажимаю ссылку в том же окне. Если я открою ту же ссылку в новой вкладке, появится 404. Как это исправить? И о, передняя и задняя части интегрированы с плагином внешнего интерфейса eirslett maven. Файл пакета
{
"name": "myreactapp",
"version": "0.1.0",
"private": true,
"dependencies": {
"axios": "^0.19.2",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-router-dom": "^5.2.0",
"react-scripts": "3.4.1"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"proxy": "http://localhost:8080",
"homepage": "."
}
App. js:
import React, { Component } from 'react';
import LoginApp from './LoginApp'
import './App.css';
import './bootstrap.css';
class App extends Component {
render() {
return (
<div className="App">
<LoginApp/>
</div>
);
}
}
export default App;
LoginApp (домашняя страница названа так, потому что, когда я решу проблему выше, я обеспечу безопасность):
import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import HeaderComponent from './HeaderComponent.jsx';
import TestComponent from './TestComponent.jsx';
import HelloComponent from './HelloComponent.jsx';
import { withRouter } from 'react-router';
class LoginApp extends Component {
render() {
const HeaderWithRouter = withRouter(HeaderComponent);
return (
<div className='TodoApp'>
<Router basename='.'>
<div>
<HeaderWithRouter />
<Switch>
<Route path='/' exact component={HelloComponent} />
<Route path='/test' exact component={TestComponent} />
</Switch>
</div>
</Router>
</div>
);
}
}
export default LoginApp;
Меню:
import React, {Component} from 'react'
import {Link} from 'react-router-dom'
class HeaderComponent extends Component {
render() {
return (
<header>
<nav className="navbar navbar-expand-md navbar-dark bg-dark">
<div className="navbar-brand">Simple Login App JWT</div>
<ul className="navbar-nav">
<li><Link className="nav-link" to="./test">Test</Link></li>
<li><Link className="nav-link" to="./">Home</Link></li>
</ul>
</nav>
</header>
)
}
}
export default HeaderComponent
Привет:
import React, {Component} from 'react'
class HelloComponent extends Component {
render() {
return (
<>
<h1>Hello Page</h1>
<div className="container">
HELLOOOOOOOOOOOOOOOOOOOOOOOOO
</div>
</>
)
}
}
export default HelloComponent
Тест - это то же самое, что и привет, вместо этого просто слово test. Наконец, создайте из pom:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.7.6</version>
<executions>
<execution>
<id>Install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<nodeVersion>v10.15.2</nodeVersion>
<npmVersion>6.4.1</npmVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>npm build</id>
<goals>
<goal>npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
</executions>
<configuration>
<nodeVersion>v10.15.2</nodeVersion>
<workingDirectory>src/myreactapp</workingDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>Copy my react app into my Spring Boot target static folder</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>target/classes/static</outputDirectory>
<resources>
<resource>
<directory>src/myreactapp/build</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Spring boot здесь, потому что позже я создам api. Хорошо, представьте, что слова hello и test возвращаются из api. Но это ничего не изменило, новая вкладка все еще показывает 404. У меня подозрение, что ошибка находится на домашней странице в package. json и в базовом имени маршрутизатора. Но не могу решить. Спасибо за любую помощь. Ps Другой проект такого же характера только без плагина фронтенда (фронтенд на 3000 порт) позволяет открывать новые вкладки. Почему?