[英]react organizing links in render method
我找到了一个教程 ,其中根据render()
方法中创建的const
字段显示导航栏链接。 虽然代码效果很好,但我正在尝试做更多的事情。
如果用户是超级管理员 (可以说),那么我想同时显示superAdminLinks
和userLinks
。 我尝试了多种方法,但无法正确处理。 任何帮助,将不胜感激。 谢谢!
我的render()
代码段如下所示
render() {
const isSuperAdmin = user.user_role === "SUPER_ADMIN";
const userLeftMenu = (
<ul className="nav nav-sidebar">
<li>UserLink1</li>
<li>UserLink2</li>
</ul>
)
const superAdminLeftMenu = (
<ul className="nav nav-sidebar">
<li>SuperAdminLink1</li>
<li><SuperAdminLink2</li>
</ul>
)
return (
<header>
<div className="container-fluid">
<div className="row">
<div className="col-sm-3 col-md-2 sidebar">
{ isSuperAdmin ? superAdminLeftMenu : userLeftMenu }
</div>
</div>
</div>
</header>
);
}
如果用户是SuperAdmin,则以上代码仅呈现SuperAdminLinks。 如何呈现SuperUser的用户和超级管理员链接?
您可以使用React.Fragment :
const { render } = ReactDOM; const role = "SUPER_ADMIN"; const App = () => { const isSuperAdmin = role === "SUPER_ADMIN"; const userLeftMenu = ( <React.Fragment> <li>UserLink1</li> <li>UserLink2</li> </React.Fragment> ); const superAdminLeftMenu = ( <React.Fragment> <li>SuperAdminLink1</li> <li>SuperAdminLink2</li> {userLeftMenu} </React.Fragment> ); return ( <header> <div className="container-fluid"> <div className="row"> <div className="col-sm-3 col-md-2 sidebar"> <ul className="nav nav-sidebar"> {isSuperAdmin ? superAdminLeftMenu : userLeftMenu} </ul> </div> </div> </div> </header> ); }; render(<App />, document.getElementById("root"));
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> <div id="root"></div>
<div className="col-sm-3 col-md-2 sidebar">
{ isSuperAdmin ? superAdminLeftMenu : userLeftMenu }
{ isSuperAdmin && userLeftMenu }
</div>
return (
<header>
<div className="container-fluid">
<div className="row">
<div className="col-sm-3 col-md-2 sidebar">
{ isSuperAdmin && superAdminLeftMenu }
{ isSuperAdmin && userLeftMenu }
</div>
</div>
</div>
</header>
)
如果不是这样, UserLeftMenu
总是在SuperUserLeftMenu
,那么我们可以使用一种更好的方法来做到这一点。 这种形式使您可以在if
语句中返回所需的所有组件:
const { render } = ReactDOM; const role = "SUPER_ADMIN"; const App = () => { const isSuperAdmin = role === "SUPER_ADMIN"; const UserLeftMenu = () => ( <div> <li>UserLink1</li> <li>UserLink2</li> </div> ); const SuperAdminLeftMenu = () => ( <div> <li>SuperAdminLink1</li> <li>SuperAdminLink2</li> </div> ); return ( <header> <div className="container-fluid"> <div className="row"> <div className="col-sm-3 col-md-2 sidebar"> { isSuperAdmin ? <div> <SuperAdminLeftMenu/> <UserLeftMenu/> </div> /* Return 'SuperAdminLeftMenu' and 'UserLeftMenu' components. If you returns components of this form, you can return all component you want inside same if */ : <UserLeftMenu /> } </div> </div> </div> </header> ); }; render(<App />, document.getElementById("root"));
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> <div id="root"></div>
如果UserLeftMenu
始终位于SuperUserLeftMenu
,则可以执行以下操作:
const { render } = ReactDOM; const role = "SUPER_ADMIN"; const App = () => { const isSuperAdmin = role === "SUPER_ADMIN"; const UserLeftMenu = () => ( <div> <li>UserLink1</li> <li>UserLink2</li> </div> ); const SuperAdminLeftMenu = () => ( <div> <li>SuperAdminLink1</li> <li>SuperAdminLink2</li> { <UserLeftMenu/> } </div> // Include 'UserLeftMenu' inside 'SuperAdminLeftMenu' ); return ( <header> <div className="container-fluid"> <div className="row"> <div className="col-sm-3 col-md-2 sidebar"> { isSuperAdmin ? <SuperAdminLeftMenu/> // Return 'SuperAdminLeftMenu' component : <UserLeftMenu /> } </div> </div> </div> </header> ); }; render(<App />, document.getElementById("root"));
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> <div id="root"></div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.