【问题标题】:React JS component with nested navigation带有嵌套导航的 React JS 组件
【发布时间】:2017-06-11 13:31:43
【问题描述】:

我在以下方面遇到了一些麻烦。我已经尝试了几个小时通过搜索找到一些帮助,但空手而归。可能是我不知道我正在尝试做的事情的名称,但我想我会在这里问。

我已经学习 React 大约一个月了。目前我正在尝试创建一个组件,该组件具有自己的导航栏,并根据单击组件导航栏中的链接来显示其内容。

我有一个整个网站的导航栏,使用 React Router,我尝试将组件的路由嵌套在我希望显示的页面的路由中,但是当我单击所述组件中的链接时,而不是只需在该组件中显示内容,我就会导航到一个新页面(在本例中:localhost3000/#/project1)。该新页面显示了整个组件,并具有正确的内容。但是,我想避免导航到新页面。

这是一张我想做的照片。

这是我目前得到的一些代码。 (我省略了导入和其他任何不必要的内容。

我的 index.js

ReactDOM.render(
  <Router history={hashHistory}>
    <Route path="/" component={App}>
      <IndexRoute component={OtherPage}></IndexRoute>
      <Route path="Project_Page" component={ProjectPage} />
      <Route component={ProjectsComponent}>
        <Route path="project1" component={Project1} />
        <Route path="project2" coponent={Project2} />
        <Route path="project3" coponent={Project3} />
      </Route>
      <Route path="Another_Page" component={AnotherPage}></Route>
    </Route>
  </Router>
  ,
  document.getElementById('root')
);

我的 ProjectPage.js

export default class ProjectPage extends Component{
  render(){
    return(
      <div>
         <ProjectsComponent />
      </div>
    );
  }
}

我的 ProjectsComponent.js

export default class ProjectsComponent extends Component{
  render(){
    return(
      <div>
        <ProjectsNav />      // this is the navbar for my projects component
        <div>
          {this.props.children}
        </div>
      </div>
    );
  }
}

我的项目Nav.js

export default class ProjectsNav extends Component{
  render(){
    return(
      <div>
        <Link to="Project1" className="btn btn-primary">Project 1</Link>
        <Link to="Project2" className="btn btn-primary">Project 2</Link>
        <Link to="Project3" className="btn btn-primary">Project 3</Link>
      </div>
    );
  }
}

终于 我的 Project1.js project2 && project3 几乎是一回事。

export default class Project1 extends Component{
  render(){
    return(
      <div className="project">
        Hello from Project 1
      </div>
    );
  }
}

很抱歉,如果这是已经涵盖的内容。如果有,请随时指出我正确的方向。这就是我所需要的。

非常感谢您的帮助。

【问题讨论】:

  • 让我做对了...您希望应用程序显示链接的组件而不是导航到另一个页面,对吗?如果是这样,您正在请求 React 的用途。换句话说,单页应用程序 (SPA)。如果这是问题,我会提供答案。
  • 是的。这正是我想要做的。
  • 您需要利用父组件中的组件状态来保存所选项目。您将将此状态传递给所有 Project 组件,并且与此状态匹配的一个组件将呈现,而其他组件则不会。我现在没有时间,但有时间我会发布答案。
  • 我在您的代码中注意到以下几点:1) React Router 不支持位置中的相对路径,因此 &lt;Link to="Project1" ...&gt; 应该是 &lt;Link to="/Project1" ...&gt;。 2) &lt;Route&gt;s 中的路径是小写的,而 &lt;Link&gt;s 中的路径名是大写的。我不记得在路由方面是否存在区分大小写的匹配。
  • 大家好。感谢您抽出宝贵时间提供帮助。我会尝试看看我是否可以弄清楚如何使用道具来做到这一点。 Paul A,我在示例中更改了路径和组件的名称,以使其更加通用。这样做,我一定是在标点符号上犯了一两个错误。

标签: reactjs react-router react-jsx nested-routes


【解决方案1】:

ProjectsComponent 组件不是必需的,试试这些组件:

ReactDOM.render(
  <Router history={hashHistory}>
    <Route path="/" component={App}>
      <IndexRoute component={OtherPage}></IndexRoute>
      <Route path="Project_Page" component={ProjectPage}>
      //<Route component={ProjectsComponent}>
        <IndexRoute path="Project_Page/Project1" component={Project1} />
        <Route path="Project_Page/Project2" coponent={Project2} />
        <Route path="Project_Page/Project3" coponent={Project3} />
      </Route>
      <Route path="Another_Page" component={AnotherPage}></Route>
    </Route>
  </Router>
  ,
  document.getElementById('root')
);


export default class ProjectPage extends Component{
  render(){
    return(
      <div>
         <ProjectsNav />
        <div>
          {this.props.children}
        </div>
      </div>
    );
  }
}


export default class ProjectsNav extends Component{
  render(){
    return(
      <div>
        <Link to="Project_Page/Project1" className="btn btn-primary">Project 1</Link>
        <Link to="Project_Page/Project2" className="btn btn-primary">Project 2</Link>
        <Link to="Project_Page/Project3" className="btn btn-primary">Project 3</Link>
      </div>
    );
  }
}

如果您遇到任何问题或需要任何帮助,请告诉我。

【讨论】:

  • 太棒了!它看起来相当清晰。我稍后下班回家时会试试这个。比你好多了。我会让你知道情况如何。 ?
猜你喜欢
  • 2018-11-16
  • 2019-07-28
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 2022-06-25
  • 1970-01-01
相关资源
最近更新 更多