【问题标题】:route redirects to nothing react-router 4 [duplicate]路由重定向到任何反应路由器4 [重复]
【发布时间】:2017-11-15 07:06:04
【问题描述】:

我不确定为什么所有内容都重定向到空白页面:

我正在使用:

"react-router": "^4.2.0",
"react-router-dom": "^4.1.1",

App.js

import { BrowserRouter, Route, Switch } from 'react-router-dom';

    class Container extends Component{
      render() {
        return (
          <div>{this.props.children}</div>
        );
      }
    }

    export default class App extends Component {
      render() {
        return (
          <BrowserRouter onUpdate={onUpdate}>
            <Switch>
              <Route component={HomePageContainer} exact path="/" />
              <Route component={CompanyDetailContainer} name="companydetail" path="interviews/companies/:companyId/details" />
              <Route component={InterviewContainer} name="interview" path="interviews/companies/:companyId" />
              <Route component={Container} path="/" />
              <Route component={NotFound} path="*" />
            </Switch>
          </BrowserRouter>
        );
      }
    }

到“/”的主页路径运行良好。

所有其他路线都不起作用。

例如,当用户单击重定向到这些路由或默认路由以外的其他路由的超链接时,我得到一个空白页面:

   <Route component={CompanyDetailContainer} name="companydetail" path="interviews/companies/:companyId/details" />
      <Route component={InterviewContainer} name="interview" path="interviews/companies/:companyId" />

这是我使用 react-router v3 时路由的工作方式:

<Router history={browserHistory} onUpdate={onUpdate}>
    <Route path="/">
      <IndexRoute component={HomePageContainer} />
      <Route component={InterviewContainer} name="interview"  path="interviews/companies/:companyId" />
      <Route component={About} name="about" path="about"  />
      <Route component={JobList} name="jobs" path="jobs"  />
    </Route>
    <Route component={Container} path="/"  />
    <Route component={NotFound} path="*"  />
</Router>

注意,我最近还为 companydetail 添加了新路由。

【问题讨论】:

    标签: javascript reactjs react-router


    【解决方案1】:

    您的所有路径都必须与基本路径相关,即/

    将您的路由器配置更改为

     <Switch>
              <Route component={HomePageContainer} exact path="/" />
              <Route component={CompanyDetailContainer} name="companydetail" path="/interviews/companies/:companyId/details" />
              <Route component={InterviewContainer} name="interview" path="/interviews/companies/:companyId" />
              <Route component={Container} path="/" />
              <Route component={NotFound} path="*" />
     </Switch>
    

    【讨论】:

    • 我看不出你有什么不同
    • 基本路径必须有一个前导 / path="/interviews/companies/:companyId/details"path="/interviews/companies/:companyId"
    • 是的,我明白了。那么这是 react-router 4 的事情吗?因为我不能再筑巢了对吧?当我在 v3 中嵌套时,可能在父路由中处理了“/”
    • 还是不行……
    • 查看这个关于如何嵌套路由的答案stackoverflow.com/questions/44452858/…
    【解决方案2】:

    尝试将您的路由器封装在一个匿名函数中。

    const App = () => (
          <BrowserRouter onUpdate={onUpdate}>
            <Switch>
              <Route component={HomePageContainer} exact path="/" />
              <Route component={CompanyDetailContainer} name="companydetail" path="interviews/companies/:companyId/details" />
              <Route component={InterviewContainer} name="interview" path="interviews/companies/:companyId" />
              <Route component={Container} path="/" />
              <Route component={NotFound} path="*" />
            </Switch>
          </BrowserRouter>
    )
    

    【讨论】:

    • 为什么/???我喜欢它作为一个类
    • 因为所有的 v4 示例都是这样 >medium.com/@pshrmn/…
    • 是的,但不一定非要这样..
    • 我只是建议您尝试一下,看看您是否可以像示例一样工作,然后在工作后改变口味。
    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 2016-11-22
    • 2018-08-13
    • 2019-02-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多