当前位置: 首页 > 知识库问答 >
问题:

在另一个组件V6中响应路由

吕奇
2023-03-14

我使用Reavt V6路由。

我正在努力让我的路线在游戏组件中工作。

在完全空白的页面中查看/测试结果。而它应该在gamecomponent中加载犯罪模块。访问/呈现gamecomponent,但/test不会呈现gamecomponent及其内部的路由。

我怎样才能让它工作?

访问url/crime会导致gamecomponent被加载,并且

<Route path="/test" element={<Crime />} />

应该上膛了。

app.js

import React from 'react';
import logo from './logo.svg';
import './App.css';
import GameComponent from './gameComponent.jsx';
import { BrowserRouter as Router } from 'react-router-dom';
import { Routes, Route, Navigate, Outlet, Switch } from 'react-router-dom';
import PrivateRoute from './PrivateRoute';
import Login from './components/login/login.jsx';



function App() {
    
  return (

  <Router>
    <Routes>
       <Route path="/login" element={<Login />} />
       <PrivateRoute  isAuth={true} path="/" component={GameComponent}  redirectTo='/login'/>
    </Routes>
  </Router>
  );
}
export default App;

专用路线:

import React from 'react';
import PropTypes from 'prop-types';
import { Route, Navigate } from 'react-router-dom';
import { useNavigate  } from "react-router-dom";
import Login from './components/login/login.jsx';
import GameComponent from './gameComponent.jsx';


const PrivateRoute = ({ component: Component, redirectTo, isAuth, path, ...props }) => {
    //isAuth = false;
    
    if(!isAuth) {
        return <Navigate to={redirectTo} />;
    }
    return <Route path={path} element={<Component />} />
};

export default PrivateRoute;

游戏成分:

import React, {Component} from 'react';
//import Component from 'react-dom';
import SideBarRight from './components/game/sideBarRight.jsx';
import SideBarLeft from './components/game/sideBarLeft.jsx';
import Crime from './components/game/crime.jsx';
import Login from './components/login/login.jsx';
import './gameComponent.css';
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';
import { BrowserRouter} from "react-router-dom";


class GameComponent extends Component{
 constructor() {
    super();
    this.state = {
    userData: {
        user: {cash:0, bank:0, weapon:'', username: 'test', locationname: 'Bankok',
        defence: 0},
        rankbar: {rankpercent: 50, rank: 'Mafia'},
        }
    }
    
    
    
    
  }


render() {
    return (
    <div className="main">
    <div className="sidebar left">
                <SideBarLeft/>

    </div>
    <div className="middleContentHolder">
     <Route path="/" element={<Crime />} />
    <Route path="/test" element={<Crime />} />
    <Route path="/crime" element={<Crime />} />
    <Route path="/test2" element={<SideBarRight UserData={this.state.userData} />} />


        <div className="col-8">
            <div className="content">
            <div className="header"><span>Test...</span></div>
            
            </div>
        </div>
    </div>
    <div className="sidebar right">
        <SideBarRight UserData={this.state.userData}/>
        </div>
    </div>
    );
  }
    
}



export default GameComponent;

共有2个答案

皇甫卓君
2023-03-14

而不是元素={

检查留档以供参考。

在组件中,您可能希望使用增强它。

请参考这个问题的答案,甚至有一篇很好的解释可能会帮助你的帖子。

廉宇
2023-03-14

根据文件:

可以在需要的任何位置渲染元素,包括在另一个元素的组件树的深处。这些工具的工作原理与其他工具相同,只是它们将自动构建在渲染它们的路径上。如果执行此操作,请确保在父路由路径的末尾放置*号。否则,当父路由比父路由的路径长时,它将与URL不匹配,并且您的后代将永远不会出现。

您可以在这里阅读更多关于它的信息-后代路由

因此,您只需要做两个小改动:

app.js

*添加到PrivateRoute中的yout路径:

<Routes>
   <Route path="/login" element={<Login />} />
   <PrivateRoute
      isAuth={true}
      // Here's the trick
      path="/*"
      component={GameComponent}
      redirectTo="/login"
   />
</Routes>

gamecomponent.jsx

<Routes>
   <Route path="/" element={<Crime />} />
   <Route path="/test" element={<Crime />} />
   <Route path="/crime" element={<Crime />} />
   <Route
      path="/test2"
      element={<SideBarRight UserData={this.state.userData} />}
    />
</Routes>

这是一个代码示例:codesandbox

您可以通过以下路径进行检查:

/=

<代码>/犯罪=

/反犯罪=

 类似资料:
  • 我有一些这样的路线 在NewUrlComponent中,我可以像这样轻松地获取数据 我遇到的问题是我在屏幕上有另一个组件,不知何故,我需要在另一个组件中显示该数据标题。我不知道这有可能吗?

  • 因此,为了遵守职责分离原则,我尝试让我的修改方法(listNearestAirports)将列表返回给演示者(在不同的包中)。但我注意到,这在改型时很难做到,从必须在我的方法范围之外声明列表,到我只能在onResponse方法内迭代列表(当我试图返回列表时,我得到一个空指针异常)。请参阅下面的代码: 我想要向main()返回一个列表,因此可以执行以下操作: 什么是最简单的方法来返回来自改装的响应?

  • 我刚开始玩angular 2,遇到了一个小问题,我以各种形式搜索了它,还搜索了angulars文档。 我已经设法使一个服务,使一个调用,然后我想在一个组件中,当我按下一个按钮加载另一个组件与Dynamicload组件,并有权访问ajax结果。 问题是我不知道怎么做。。 问题是我如何使用可观察或promise方法使结果在其他组件中可访问。

  • 问题内容: 我正在尝试通过另一个组件呈现一个按钮,以引用和/或影响另一个组件的状态。 我想编写一个新组件,该组件将能够访问Inputs中的add函数。我试图像这样直接引用它: 但这没有用。如何通过另一个组件访问组件的功能,或者如何通过另一个组件影响组件的状态?谢谢。 问题答案: 您可以通过创建一个负责管理状态的父组件来完成此任务,然后将状态作为道具向下推到子组件。 jsFiddle

  • 问题内容: 许多模板语言都有“ slots”或“ yield”语句,它们允许进行某种形式的控制反转,以将一个模板包装在另一个模板中。 Angular具有“ transclude”选项。 Rails有收益声明。如果React.js拥有yield语句,它将看起来像这样: 所需的输出: React,React.js没有。如何定义包装器组件以实现相同的输出? 问题答案: 尝试: 有关更多信息,请参见文档中

  • 许多模板语言都有“slots”或“yield”语句,它们允许进行某种形式的控制反转,将一个模板包装在另一个模板中。 唉,react.js没有。我如何定义包装器组件以实现相同的输出?