javascript - React 路由器更改链接 url 但不显示组件

标签 javascript reactjs react-router jsx react-router-dom

我正在 React 中设计一个侧面导航,当我单击其项目时,我想在 Sidenav 的左侧部分显示相关组件。但是,React Router 更改了 url,但不显示该部分中的组件。这是我的代码:

Sidenav.js

import{ BrowserRouter,Route, Link } from 'react-router-dom'
import {routes} from './../../routes.js'
...

class Sidebar extends Component {

    state = {
      navActive : '0'
    }

  render () {
    return (
      <BrowserRouter>
      <NavPanel dark style={{ backgroundColor: '#2d2e2e', height: '100vh', float:'right'}} >
        <NavTitle style={{ fontFamily: 'IranSans', textAlign: 'Center' }}>
       لوگو اینجا قرار بگیرد
        </NavTitle>
        <NavSection>
          <NavSectionTitle />
          <NavSectionTitle />  

          <NavLink  key='1' style={linkStyles.base} rightEl={<FiMonitor style={linkStyles.Icon} />} className={this.state.navActive === '1' ? 'active' :' ' }
          onClick={() => this.setState({ navActive:'1' })} style={this.state.navActive !== '1' ? {fontFamily:'IranSans'} : {...linkStyles.base, borderStyle:'solid',
          borderWidth:'0px 5px 0px 0px',
          borderColor:'#50d48b'
          }
          } 
          >
          <Link style={{color:'lightblue'}} to='./../../Views/Contents/Dashboard.js'>داشبورد</Link>          
          </NavLink>  

          <NavLink  key='2' style={linkStyles.base} rightEl={<IoIosAdd style={linkStyles.AddIcon} />} className={this.state.navActive === '2' ? 'active' :' ' }
            onClick={() => this.setState({ navActive:'2' })} style={this.state.navActive !== '2' ? {fontFamily:'IranSans'} : {...linkStyles.base, borderStyle:'solid',
            borderWidth:'0px 5px 0px 0px',
            borderColor:'#50d48b'
            }
            } 
            >
            <Link style={{color:'lightblue'}} to='./../../Views/Forms/CreateJob.js'>اضافه کردن فرصت شغلی</Link>             
            </NavLink>
           ....

        </NavSection>
        {routes.map((route, index) => (
          <Route
            key={index}
            path={route.path}
            exact={route.exact}
            component={route.main}
          />
        ))}
      </NavPanel>
      </BrowserRouter>
    )
  }
}

export default Radium(Sidebar)

routes.js

import React from 'react'

export const routes = [
  {
    path: './../../Views/Contents/Dashboard.js',
    exact: true,
    main: () => <h2>y</h2>
  },
  {
    path: './../../Views/Contents/CreateJob.js',
    exact: true,
    main: () => <h2>s</h2>
  },
  {
    path: './../../Views/Contents/Job.js',
    exact: true,
    main: () => <h2>r</h2>
  },
......
]
export default routes

HRPanel.js

import SideBar from './../../Components/SideBar/SideBar'
import NavBar from './../Navigation Bar/NavBar.js'

class HRPanel extends Component {
  render () {
    return (
      <div id='App'>
        <SideBar />
        <NavBar />
      </div>
    )
  }
}

export default HRPanel

App.js

import React from 'react'
import Login from './Components/Login/Login.js'
import HRPanel from './Components/HR Panel/HRPanel.js'
import CreateJob from './Views/Forms/CreateJob.js'
import BasicInfo from './Views/Contents/BasicInfo.js'
import Dashboard from './Views/Contents/Dashboard.js'
import Education from './Views/Contents/Education.js'
import Feedback from './Views/Contents/Feedback.js'
import Finance from './Views/Contents/Finance.js'
import Insurance from './Views/Contents/Insurance.js'
import Jobs from './Views/Contents/Jobs.js'
import Management from './Views/Contents/Management.js'
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'

function App () {
  return (
    <Router>
      <Switch>
        <Route exact path='/' component={Login} />
        <Route exact path='./Components/HR Panel/HRPanel.js' component={HRPanel} />
        <Route exact path='./Views/Forms/CreateJob.js' component={CreateJob} />
        <Route exact path='./Views/Contents/BasicInfo.js' component={BasicInfo} />
        <Route exact path='./Views/Contents/Dashboard.js' component={Dashboard} />
        <Route exact path='./Views/Contents/Education.js' component={Education} />
        <Route exact path='./Views/Contents/Feedback.js' component={Feedback} />
        <Route exact path='./Views/Contents/Finance.js' component={Finance} />
        <Route exact path='./Views/Contents/Insurance.js' component={Insurance} />
        <Route exact path='./Views/Contents/Jobs.js' component={Jobs} />
        <Route exact path='./Views/Contents/Management.js' component={Management} />
      </Switch>
    </Router>
    // <Login> </Login>
    // <HRPanel> </HRPanel>
  )
}
export default App

问题出在哪里?

最佳答案

您正在指定path支持Route组件不正确。 path不是 React 组件文件的相对文件路径,而是要匹配的 URL 路径。更改path在组件/文件的所有位置中,将其作为要匹配的 URL 路径,而不是组件的路径。例如,如果您想要 HRPanel当用户导航到 /hr 时显示/更改path对于Route<Route exact path='/hr' component={HRPanel} />App.js可能看起来像:

  <Switch>
    <Route exact path='/' component={Login} />
    <Route exact path='/hr' component={HRPanel} />
    <Route exact path='/jobs/create' component={CreateJob} /> />
// ... remaining paths
  </Switch>

还有Link有 Prop to以同样的方式不正确。 to应指定要​​导航到的 URL 路径,而不是组件的相对路径。它应该看起来像:

<Link style={{color:'lightblue'}} to='/dashboard'>داشبورد</Link>

希望有帮助

关于javascript - React 路由器更改链接 url 但不显示组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61105538/

相关文章:

javascript - 在 JavaScript 中按语言检索元标记的内容

javascript - 在 react 中传递输入状态

javascript - meteor react 器相当于 react 路由器是什么?

javascript - ReactJS 更新数组

javascript - 固定();仅返回 .00

javascript - 使用 onClick 功能通信两个 React 子组件

javascript - 我可以获取闭包中变量的更新值吗?

reactjs - 如何指定react-router-dom路由以便匹配?

node.js - 服务器渲染 react-router v4 passthrough if 404

javascript - 自动化和简化跨浏览器支持