我必须基于两个不同的条件渲染两个组件,如果isAllowed
标志为true,则首先显示一个组件。如果isAllowed
和isEditMode
为true,则必须显示另一个组件。而且我在同一渲染方法中依赖于isAllowed
标志的更多条件。
目前,我是通过实现以下代码来实现这一目标的。
render(){
return (
<div>
{
isAllowed && <span> component 1 </span>
}
{
isAllowed && isEditMode && <span> component 2 </span>
}
{
isAllowed && 3 more condition && <span> component 3 </span>
}
{
isAllowed && 4 more condition && <span> component 4 </span>
}
</div>
)
}
我想对isAllowed
进行常规检查。因为这两种情况都很常见。有可能吗?
答案 0 :(得分:4)
您可以使用React Fragment
检查一次isActive
,然后在其中检查isEditMode
。
示例
class App extends React.Component {
render() {
const { isAllowed, isEditMode } = this.props;
return (
<div>
{isAllowed && (
<React.Fragment>
<span> component 1 </span>
{isEditMode && <span> component 2 </span>}
</React.Fragment>
)}
</div>
);
}
}
ReactDOM.render(<App isAllowed isEditMode />, document.getElementById("root"));
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="root"></div>
答案 1 :(得分:2)
您可以使用数组:
render() {
const components = [];
if (isAllowed) {
components.push(<span> component 1 </span>);
if (isEditMode) {
components.push(<span> component 2 </span>);
}
}
return <div>{ components }</div>;
}
这提供了更大的灵活性,尤其是在您有很多组件和不同条件的情况下。当然,如果可以保持可读性,您也可以使用内联表达式而不是单独的语句来完成它:
return <div>{
isAllowed
? [
<span> component 1 </span>,
isEditMode ? <span> component 2 </span> : null
]
: null
}</div>
或
return <div>{
isAllowed && [
<span> component 1 </span>,
isEditMode && <span> component 2 </span>
]
}</div>
答案 2 :(得分:1)
好的。您可以为此使用三元运算
{isAllowed && <Fragment>{isEditMode ? 'When editing' : 'When not editing'}</Fragment>}