【问题标题】:Conditional Rendering React Bootstrap Columns Within Array Map数组映射中的条件渲染 React Bootstrap 列
【发布时间】:2019-10-20 15:22:03
【问题描述】:

在我的 react 应用程序中,我将一个数组映射到渲染函数的 JSX 中的引导列。在我的数组对象中有一个名为“taken”的属性,如果这是真的,那么我想映射不同的列而不是如果它是假的。

我尝试调用一个方法来渲染输出,设置一个变量并直接在 JSX 中渲染。我尝试了${test.datesubmitted} 的不同排列。

            { test.taken
              ? <Col>Taken</Col><Col>`${test.datesubmitted}`</Col>
              : <Col><button id={test.id} className="likelink" onClick={this.handleClickInvite}>Invite</button></Col>
            }
            <Col><button id={test.id} className="likelink" onClick={this.handleTakeTest}>Take Test</button></Col>

【问题讨论】:

  • 您面临的问题是什么?
  • 问题是它不允许我渲染值 test.datesubmitted。

标签: javascript reactjs react-bootstrap conditional-rendering


【解决方案1】:

标记的模板文字是JS,因此需要用花括号括起来。试试这个:

<Col>{`${test.datesubmitted}`}</Col>

或者当您直接渲染字符串值而不使用任何连接时,更好的选择是:

<Col>{test.datesubmitted}</Col>

【讨论】:

    【解决方案2】:

    我尝试了上面的答案,但一直收到 JSX 错误,我不确定这是否是 react-bootstrap 的限制。

    我设法通过为每列工作多次编写条件语句来达到预期的结果。不知道为什么我之前没有想到。

                { test.taken ? <Col>taken</Col> : null }
                { test.taken ? <Col>{test.datesubmitted}</Col> : null }
                { test.taken ? <Col>{test.result}</Col> : null }
                { test.taken ? <Col>{test.score} out of {test.outof}</Col> : null }
                { !test.taken ?  <Col><button id={test.id} className="likelink" onClick={this.handleTakeTest}>Take Test</button></Col> : null}
    

    可能有更好的方法,但目前看来还可以。

    【讨论】:

      【解决方案3】:

      如果我没记错的话。应该是这样的。假设您在女巫中有一个对象数组,其中一个字段被认为是 take 。

      例如。 tests = [{taken:true,...rest},...rest object]

      在你的 react 应用中,你必须像这样渲染它

          const TestTaken = () => {
      return test.map((test) =>
          test.taken ?
          < > < Col > Taken < /Col><Col>`${test.datesubmitted}`</Col > < /> :
          < Col > < button id = {
              test.id
          }
          className = "likelink"
          onClick = {
              this.handleClickInvite
          } > Invite < /button></Col >
      
      )
      

      }

      在你的渲染函数中你可以像这样渲染:

          render(){
      
           return(
             <TestTaken/>
             ...rest your code
           )}
      

      这是我根据您提供的信息添加的。如果你有任何双重让我知道。

      【讨论】:

      • 这给了我错误“解析错误:相邻的 JSX 元素必须包含在封闭标记中。你想要一个 JSX 片段 ...> 吗?”
      • 谢谢,现在我会坚持我在下面找到的解决方案。
      猜你喜欢
      • 2021-02-22
      • 2018-12-01
      • 2014-10-29
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多