繁体   English   中英

嵌套的react-router:与任何路由都不匹配

[英]Nested react-router: did not match any routes

我正在React-Router 1.0.0-rc3中设置嵌套路由。 每当我尝试访问其中一条嵌套路线时,都会引发错误:“警告:位置“汽车/家庭汽车”与任何路线都不匹配”。

这是一个样机:

路由(站点)结构

这是我的路线:

<Route path="/" component={App}>
  <IndexRoute component={Home} />

  <Route path="categories" component={CategoriesPage} />

  <Route path="categories/:slug" component={CategoryPage}>
    <Route path=":slug" component={ProductTypePage} />
    <IndexRoute component={CategoryPage} />
  </Route>

  <Route path="*" component={AppNotFound} />
</Route>

零件:

CategoryPage = React.createClass({
  renderNavLinks(type) {
    return (
      <li key={type.slug}>
        // "type.parent" is a category name, e.g.
        // <a href="http://www.myshop.com/categories/cars/family-cars">Citroën</a>
        <Link to={type.parent + "/" + type.slug}>{type.name}</Link>
      </li>
    );
  },
  render() {
    return (
      <div>
        <h1>{this.data.category[0].name}</h1>
        <nav>
          <ul>
            { R.map(this.renderNavLinks, this.data.productTypes) }
          </ul>
        </nav>
        <section>
          {this.props.children}
        </section>
      </div>
    );
  }
});

UPD:

我重新阅读了您的错误消息:

“警告:位置“汽车/家庭汽车”与任何路线均不匹配”。

您确定您的链接指向“ / categories / cars / family-cars”,而不仅仅是“ / cars / family-cars”吗?

尝试像这样修复您的链接:

<Link to={"/categories/" + type.parent + "/" + type.slug}>{type.name}</Link>

原始答案:

似乎问题出在其他地方,因为当我尝试将路由器降级到1.0.0-rc3时,这些配置一切正常:

路线:

<Route path='/' component={ConnectedApp}>
  <IndexRoute component={ConnectedDetails} />
  <Route path='wishlist' components={ConnectedWishlist} />
  <Route path='categories/:details' component={ConnectedDetails}>
    <Route path=':edit' component={DetailsEdit} />
    <IndexRoute component={DetailsView} />
  </Route>
</Route>

边栏:

<div className='sidebar'>
  <Link activeClassName='sidebar-link_active' className='sidebar-link' to='/categories/lol/wut'>
    Persoonlijke gegevens
  </Link>

  <Link activeClassName='sidebar-link_active' className='sidebar-link' to='/categories/lol'>
    Verlanglijst
  </Link>
</div>

截图

我已经实现了

Index.js是我的应用程序入口点,其中包含以下代码

 fetchData(config.url+'/Tasks.json?TenantId='+config.TenantId).then(function(items)
{
    var TaskData=JSON.parse(JSON.stringify(items.json.Tasks));
    var Data=[];
    Object.keys(TaskData).map(function(task){
        if(TaskData[task].PageName !=='' && TaskData[task].PageUrl !=='')
        {
            Data.push({PageName:TaskData[task].PageName,path:TaskData[task].PageName+'/?:RelationId',PageUrl:TaskData[task].PageUrl});
        }
    });

    Data.push({PageName:'ContainerPage',path:'/ContainerPage/?:RelationId',PageUrl:'./pages/ContainerPage'});

        var routes=require('./routes')(Data);
        Router.run(routes,function(Handler){
        React.render(<Handler />,document.getElementById('root'));
    });

   }).catch(function(response)
{
    showError(response);
});

在这里,我创建了一个可以包含Routes详细信息的Data数组,并在我的route.js文件中传递了该数组,该文件正在创建传递数据的Route,因此我的route.js文件包含下面提到的代码

 export default (data =>
  <Route name="App" path="/" handler={App}>
    <NotFoundRoute handler={require('./pages/PageNotFound')} />
        </Route>
{ data.map(task =>
  <Route name={task.PageName} path={task.path}  handler={require(task.PageUrl)}>
  </Route>
    ) }
</Route>
);

希望这可以对您有所帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM