首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按钮与普通文本之间的ReactJS条件渲染

按钮与普通文本之间的ReactJS条件渲染
EN

Stack Overflow用户
提问于 2018-09-20 09:30:13
回答 3查看 35关注 0票数 0

我有一个对象数组,比如defect,现在如果缺陷的状态是打开的,那么它应该显示为按钮,它应该读取关闭缺陷,如果它是关闭的,那么作为按钮,它应该提到关闭。因此,在这里,statusRender是问题所在,现在正按照上一篇专栏所期望的那样工作。不知道我错过了什么。有什么线索吗?

代码语言:javascript
复制
render() {

  if (defect.defect_status == 'open') {
    statusRender = <button key={index} data-id={defect.id} onClick={() => this.showAlert(defect.defect_id)}>{defect.defect_status}</button>;
  } else {
    statusRender = { defect.defect_status };
  }
  return (
    <div>
      <table className="table table-bordered table-hover">
        <thead>
          <tr>
            <th>Defect ID</th>
            <th>Category</th>
            <th>Description</th>
            <th>Priority</th>
            <th>Status</th>
          </tr>
        </thead>
        <tbody>
          {this.state.defectList.map((defect, index) => {
            return (
              <tr key={index}>
                <td> {defect.defect_id}  </td>
                <td>{defect.defect_category}</td>
                <td>{defect.defect_description}</td>
                <td>{defect.defect_priority}</td>
                <td> {statusRender}
                </td>
              </tr>
            );
          })
          }
        </tbody>
      </table>
    </div>
  )
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-20 10:20:38

多亏了user1095118,移除分号完成了这项工作。我错过了解决这个问题的花括号的正确性。

代码语言:javascript
复制
{ 
          defect.defect_status == 'open' 
           ?<button key={index} data-id={defect.id} onClick = {() => this.showAlert(defect.defect_id)}>{defect.defect_status}</button> : defect.defect_status
        }
票数 0
EN

Stack Overflow用户

发布于 2018-09-20 09:39:52

这是一个范围问题,您不能在map函数之外声明缺陷。

代码语言:javascript
复制
{this.state.defectList.map((defect,index) => {
 return (
    <tr key={index}>   
      <td> {defect.defect_id}  </td>
      <td>{defect.defect_category}</td>
      <td>{ defect.defect_description}</td>
      <td>{ defect.defect_priority}</td>
      <td> 
        { 
          defect.defect_status === 'open' 
           ? <button key={index} data-id={defect.id} onClick = {() => this.showAlert(defect.defect_id)}>{defect.defect_status}</button>;
           : defect.defect_status;
        }
      </td>    
    </tr>
   );      
 })
}
票数 2
EN

Stack Overflow用户

发布于 2018-09-20 09:43:21

如果您只需要访问状态字符串而不是按钮,也许您应该删除If else语句中的括号。

代码语言:javascript
复制
render() {

   if(defect.defect_status=='open') {
  statusRender = <button key={index} data-id={defect.id} onClick = {() => this.showAlert(defect.defect_id)}>{defect.defect_status}</button>;
} else {
  // No brackets here ? 
  statusRender = defect.defect_status;
}
      return (
        <div>
        <table className="table table-bordered table-hover">
           <thead>
            <tr>
              <th>Defect ID</th>
              <th>Category</th>
              <th>Description</th>
              <th>Priority</th>
              <th>Status</th>
            </tr>
          </thead>
          <tbody>
        {this.state.defectList.map((defect,index) =>{
         return(
         <tr key={index}>   
        <td> {defect.defect_id}  </td>
        <td>{defect.defect_category}</td>
        <td>{ defect.defect_description}</td>
        <td>{ defect.defect_priority}</td>
        <td> {statusRender}
          </td>    
       </tr>
         );      
        })
}
</tbody>
     </table>
          </div>
          )


  }
}

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52421845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档