【问题标题】:Conditional Rendering not working in React mapped loop条件渲染在 React 映射循环中不起作用
【发布时间】:2017-07-16 11:33:21
【问题描述】:

我正在尝试在反应中使用条件映射循环渲染,但我收到错误。

代码如下:

const navbarValue = [{"Category":"Home","Status":1},{"Category":"About","Status":0},{"Category":"Contact","Status":0}];
function NavbarActive(props) {
	return  (
		<li className="active"><a href="">{props.Category}</a></li>
	);
};
function NavbarNotActive(props) { 
	return (
		<li><a href="">{props.Category}</a></li>
	);
};
	
function NavbarList(props)	{
	return (
			 <div className="navbar-wrapper">
	<div className="container">
	<nav className="navbar navbar-fixed-static-top navbar-inverse">
	<div className="container">
	<div className="navbar-header">
	<button type="button" className="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
   <span className="sr-only">Toggle navigation</span>
		<span className="icon-bar"></span>
		<span className="icon-bar"></span>
		<span className="icon-bar"></span>
	</button>
	<a className="navbar-brand" href="#">Brand</a>
	</div>
	  <div id="navbar" className="collapse navbar-collapse">
	  <ul className="nav navbar-nav">
	  {navbarValue.map((obj, index) =>
	    if (obj.Status) {
	    <NavbarActive  key={index} Category ={obj.Category }/>
	    }
	  <NavbarNotActive  key={index} Category ={obj.Category }/>
	)}
	</ul>
	</div>
	</div>
	</nav>
	</div>
	</div>
	);
};

ReactDOM.render(
  <NavbarList  />,
  document.getElementById('root')
);
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="root"></div>

没有条件语句的工作代码:

const navbarValue = [{"Category":"Home","Status":1},{"Category":"About","Status":0},{"Category":"Contact","Status":0}];
function NavbarActive(props) {
	return  (
		<li className="active"><a href="">{props.Category}</a></li>
	);
};
function NavbarNotActive(props) { 
	return (
		<li><a href="">{props.Category}</a></li>
	);
};
	
function NavbarList(props)	{
	return (
			 <div className="navbar-wrapper">
	<div className="container">
	<nav className="navbar navbar-fixed-static-top navbar-inverse">
	<div className="container">
	<div className="navbar-header">
	<button type="button" className="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
   <span className="sr-only">Toggle navigation</span>
		<span className="icon-bar"></span>
		<span className="icon-bar"></span>
		<span className="icon-bar"></span>
	</button>
	<a className="navbar-brand" href="#">Brand</a>
	</div>
	<div id="navbar" className="collapse navbar-collapse">
		<ul className="nav navbar-nav">
			{navbarValue.map((obj, index) =>
				<NavbarNotActive  key={index} Category ={obj.Category }/>
			)}
			</ul>
			</div>
	</div>
	</nav>
	</div>
	</div>
	);
};

ReactDOM.render(
  <NavbarList  />,
  document.getElementById('root')
);
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
 <div id="root"></div>

我使用 obj.Status 作为“True”或“False”来指示节点是否必须处于活动状态。

【问题讨论】:

    标签: javascript twitter-bootstrap reactjs if-statement babeljs


    【解决方案1】:

    首先你需要使用{},然后将if-else语句放入map body,并返回结果。

    这样写:

    {navbarValue.map((obj, index) => {
         if (obj.Status) 
             return <NavbarActive  key={index} Category ={obj.Category }/>
         return <NavbarNotActive  key={index} Category ={obj.Category }/>
    })}
    

    或者使用ternary operator:

    {navbarValue.map((obj, index) => obj.Status ?
            <NavbarActive  key={index} Category ={obj.Category }/>
         :
            <NavbarNotActive  key={index} Category ={obj.Category }/>}
    )}
    

    【讨论】:

    • 非常感谢!
    【解决方案2】:
    {navbarValue.map((obj, index) => {
        return (
            (obj.Status) ?
                <NavbarActive  key={index} Category ={obj.Category }/> :
                <NavbarNotActive  key={index} Category ={obj.Category }/>
        )
    })}
    

    用三元运算符试试这段代码。

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 2019-10-20
      • 2018-08-30
      • 2019-05-03
      相关资源
      最近更新 更多