React - 如何在 React 应用程序中进行动态路由

React - How to do Dynamic Routing in React app

我是 React 新手,开始使用基本路由,我对路由有严重疑问。

  1. 我有 3 页 "Welcome.js" , "Signin.js, "Signup.js".

  2. "Welcome.js" 包含登录和注册按钮。

  3. 点击登录和注册按钮,它会转到相应的页面。

  4. 登录和注册页面都包含一个后退按钮,点击后退按钮会转到 welcome.js 页面。

  5. 登录页面包含文本 "if your a newuser go to signup",注册页面包含文本 "already a user, go to login"。单击该文本,它会转到相应的页面。

所以我的问题是,如果我单击 "if your a newuser go to signup" 并进入注册页面并按后退按钮,它会转到 "welcome page"。我希望它转到登录页面,因为注册页面来自单击登录页面中的文本。

请给我一个想法,这样我就可以在以后的工作中实现这个路由。

这应该适合你。您可以使用 React 路由器和 withRouter hoc 访问 history 道具以推送到其他屏幕。

import { Router, Route, Switch, withRouter } from 'react-router';

const welcome = withRouter(({ history }) => {
  return (
    <>
      <button onClick={() => history.push('/signup')}>Signup</button>
      <button onClick={() => history.push('/sigin')}>SignIn</button>
    </>
  );
})

const signIn = withRouter(({ history }) => {
  return (
    <button onClick={() => history.push('/signup')} />
  );
})

const signUp = withRouter(({ history }) => {
  return (
    <button onClick={() => history.push('/signin')} />
  );
})

const App = () => {
  return (<Router history={history}>
    <Switch>
      <Route path="/welocome" component={welcome} />
      <Route path="/signin" component={signin} />
      <Route path="/signup" component={signup} />
    </Switch>
  </Router>);
}

我将向您提供一个基本示例,说明我如何使用路由,也许这会有所帮助。首先,我有一个包含我所有路线的 src/routes 文件夹。在此文件夹中,我们有一个 src/routes/index.js 来处理所有路由。

class Routes extends Component {
    render() {
        return (
            <BrowserRouter>
                <Switch>
                    <Route exact path="/" render={props => <Dashboard {...props} />} />
                    <Route path="/login" render={props => <Login {...props} />} />
                    <Route path="/register" render={props => <Register {...props} />} />
                </Switch>
            </BrowserRouter>
            )
        }
    }
export default Routes;

然后导入src/App.js中的所有路由

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

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

export default App;

最后在 src/index.js 到 dom

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';


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

如果您想在任何页面中使用 link,只需

import { Link } from 'react-router-dom';

<Link to="/login">
  <Button type="button">
     Login
  </Button>
</Link>

react-router-dom 甚至有一个重定向....

import { Redirect } from 'react-router-dom';

var { redirect } = this.state;
   if(redirect) 
      return <Redirect to='/login' />

希望对您有所帮助。