与 FlowRouter 反应:如何 show/hide 基于路由的组件
React with FlowRouter: How to show/hide component based on route
我有一个正在使用 React
开发的 Meteor
应用程序,我使用 FlowRouter
进行路由选择。我的项目主要 AppContainer
有一堆组件,其中之一是页脚。
class AppContainer extends Component {
render() {
return(
<div className="hold-transition skin-green sidebar-mini">
<div className="wrapper">
<Header user={this.props.user} />
<MainSideBar />
{this.props.content}
<Footer />
<ControlSideBar />
<div className="control-sidebar-bg"></div>
</div>
</div>
)
}
}
我有几条通往各个聊天室的路线:
例如
/chatroom/1
/chatroom/2
/chatroom/3
如果路由是 /chatroom/<anything>
,我有办法隐藏 <Footer />
组件吗?
您也许可以通过检查当前路径来进行条件渲染。
如果/chatroom/
后面的<anything>
部分(我假设是参数)不重要,如果你没有其他以chatroom开头的路由,你可以试试这个一:
const currentPath = window.location.pathname
{!currentPath.includes('chatroom') ? <Footer /> : null }
因此您的代码将如下所示:
class AppContainer extends Component {
render() {
currentPath = window.location.pathname
return(
<div className="hold-transition skin-green sidebar-mini">
<div className="wrapper">
<Header user={this.props.user} />
<MainSideBar />
{this.props.content}
{!currentPath.includes('chatroom')
? <Footer />
: null }
<ControlSideBar />
<div className="control-sidebar-bg"></div>
</div>
</div>
)
}
}
如果<anything>
部分很重要and/or你还有其他以chatroom开头的路由,你可以先获取
路由的参数
const param = FlowRouter.getParam('someParam');
然后通过检查当前路径是否包含 chatroom/:param 来进行条件渲染,如下所示:
const currentPath = window.location.pathname
{!currentPath.includes(`chatroom/${param}`) ? <Footer /> : null }
所以你的代码应该是这样的
class AppContainer extends Component {
render() {
const currentPath = window.location.pathname
const param = FlowRouter.getParam('someParam');
return(
<div className="hold-transition skin-green sidebar-mini">
<div className="wrapper">
<Header user={this.props.user} />
<MainSideBar />
{this.props.content}
{!currenPath.includes(`chatroom/${param}`)
? <Footer />
: null }
<ControlSideBar />
<div className="control-sidebar-bg"></div>
</div>
</div>
)
}
}
您还可以使用下面的语法。它完成了与 Cagri Yardimci 提供的第一个示例相同的事情。
{ !currentPath.includes('chatroom') && <Footer /> }
我有一个正在使用 React
开发的 Meteor
应用程序,我使用 FlowRouter
进行路由选择。我的项目主要 AppContainer
有一堆组件,其中之一是页脚。
class AppContainer extends Component {
render() {
return(
<div className="hold-transition skin-green sidebar-mini">
<div className="wrapper">
<Header user={this.props.user} />
<MainSideBar />
{this.props.content}
<Footer />
<ControlSideBar />
<div className="control-sidebar-bg"></div>
</div>
</div>
)
}
}
我有几条通往各个聊天室的路线:
例如
/chatroom/1
/chatroom/2
/chatroom/3
如果路由是 /chatroom/<anything>
,我有办法隐藏 <Footer />
组件吗?
您也许可以通过检查当前路径来进行条件渲染。
如果/chatroom/
后面的<anything>
部分(我假设是参数)不重要,如果你没有其他以chatroom开头的路由,你可以试试这个一:
const currentPath = window.location.pathname
{!currentPath.includes('chatroom') ? <Footer /> : null }
因此您的代码将如下所示:
class AppContainer extends Component {
render() {
currentPath = window.location.pathname
return(
<div className="hold-transition skin-green sidebar-mini">
<div className="wrapper">
<Header user={this.props.user} />
<MainSideBar />
{this.props.content}
{!currentPath.includes('chatroom')
? <Footer />
: null }
<ControlSideBar />
<div className="control-sidebar-bg"></div>
</div>
</div>
)
}
}
如果<anything>
部分很重要and/or你还有其他以chatroom开头的路由,你可以先获取
const param = FlowRouter.getParam('someParam');
然后通过检查当前路径是否包含 chatroom/:param 来进行条件渲染,如下所示:
const currentPath = window.location.pathname
{!currentPath.includes(`chatroom/${param}`) ? <Footer /> : null }
所以你的代码应该是这样的
class AppContainer extends Component {
render() {
const currentPath = window.location.pathname
const param = FlowRouter.getParam('someParam');
return(
<div className="hold-transition skin-green sidebar-mini">
<div className="wrapper">
<Header user={this.props.user} />
<MainSideBar />
{this.props.content}
{!currenPath.includes(`chatroom/${param}`)
? <Footer />
: null }
<ControlSideBar />
<div className="control-sidebar-bg"></div>
</div>
</div>
)
}
}
您还可以使用下面的语法。它完成了与 Cagri Yardimci 提供的第一个示例相同的事情。
{ !currentPath.includes('chatroom') && <Footer /> }