reactjs - 如何使用 React 路由器和 Spring Boot Controller

标签 reactjs spring-mvc spring-boot react-router react-redux

这是我的index.js 文件

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom'
import App from './components/App';

ReactDOM.render((
             <BrowserRouter>
                <App />
             </BrowserRouter>
             ), document.getElementById('root')
            );

这是 App.js

import React, { Component } from 'react';
import Main from './Main';

class App extends Component {
render() {
return (
      <div>
        <Main />
      </div>
  );
 }
}

export default App;

这是我的 Main.js 文件

import React, { Component } from 'react';
import { Switch, Route } from 'react-router-dom';
import Home from './Home';
import AdminHome from './AdminHome';

class Main extends Component {
render() {
return (
        <Switch>
          <Route exact path='/admin' component={AdminHome}/>
          <Route exact path='/' component={Home}/>
        </Switch>
  );
 }
}

export default Main;

路由器没有路由到/admin 但它路由到/,当我运行应用程序并点击 url 'localhost:8080/admin' 时,它显示白色标签错误。

我完全困惑如何使用 react 路由器和 Controller ,任何人都可以建议我一种方法。

我仅通过为 Spring Boot Controller 中的每个请求返回 index.html 来实现路由。

最佳答案

api 之外的所有内容发送到您的 React 应用程序的一个简单方法是创建一个使用 RegEx 的 API Controller :

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ReactAppController {

    @RequestMapping(value = { "/", "/{x:[\\w\\-]+}", "/{x:^(?!api$).*$}/**/{y:[\\w\\-]+}" })
    public String getIndex(HttpServletRequest request) {
        return "/index.html";
    }

}

这个 Controller 只是将所有内容重定向到index.html,允许react和react-router发挥其魔力。

正则表达式的工作原理如下:

  • '/' - 匹配根
  • '/{x:[\\w\\-]+}' - 匹配第二个 \ 之前的所有内容。例如。 \foo
  • '/{x:^(?!api$).*$}/**/{y:[\\w\\-]+}' - 匹配所有不匹配的内容以api开头。例如。 \foo\bar?page=1

关于reactjs - 如何使用 React 路由器和 Spring Boot Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47689971/

相关文章:

javascript - validateFieldsAndScroll 不起作用并且无法读取未定义的属性 'match'

rest - 使用JAX RS或Spring MVC的REST

java - 嵌套@RestController(内部类)-有副作用吗?

spring - Spring Boot Cloud Foundry 报错 No unique service maching interface 报错

javascript - 已达到文件观察者数量的系统限制

javascript - 在函数中使用 React JS i18n

reactjs - 在复选框单击上 react 更新获取

java - @Size 注释来验证字段

logging - Spring Boot 应用程序的默认日志文件

java - @Value boolean 返回值 true 的 'invalid boolean value'