【发布时间】: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 不支持位置中的相对路径,因此
<Link to="Project1" ...>应该是<Link to="/Project1" ...>。 2)<Route>s 中的路径是小写的,而<Link>s 中的路径名是大写的。我不记得在路由方面是否存在区分大小写的匹配。 -
大家好。感谢您抽出宝贵时间提供帮助。我会尝试看看我是否可以弄清楚如何使用道具来做到这一点。 Paul A,我在示例中更改了路径和组件的名称,以使其更加通用。这样做,我一定是在标点符号上犯了一两个错误。
标签: reactjs react-router react-jsx nested-routes