【问题标题】:How to show/hide divs when a if/else condition is met in ReactJS from a data coming from JSON?当来自 JSON 的数据在 ReactJS 中满足 if/else 条件时,如何显示/隐藏 div?
【发布时间】:2018-06-02 05:26:54
【问题描述】:

当数据来自 JSON 数组时,如何在 React 中满足条件时显示/隐藏 div?到目前为止,我已经得到了这段代码,但是当我将isPassed={resultPass.pass} 的值更改为isPassed={resultPass.failed} 时,它仍然显示结果为pass

我找到的最接近的示例是this,但它不会从 JSON 中获取值(我的代码中为 var resultPass),而只是将 true/false 值分配给 const。

var resultPass = {
  "pass": "passpass",
  "fail": "failfail"
}

function Passed(props) {
  return <div class="result-pass"><h3>passpass</h3></div>;
}

function Failed(props) {
  <div class="result-fail"><h3>failfail</h3></div>;
} 

function ResultDisplay(props) {
  const isPassed = props.isPassed;
  if (isPassed) {
    return <Passed />;
  } 
  return <Failed />;
}

// When resultPass.pass is changed resultPass.fail it still shows as pass
render(<ResultDisplay isPassed={resultPass.pass} />, document.getElementById('root'));

这是我的Codesandbox

【问题讨论】:

    标签: javascript reactjs if-statement prop


    【解决方案1】:

    那是因为if (isPassed) { 总是评估为true。您应该像这样正确检查 if 条件

    if (isPassed === "passpass") {
        return <Passed />;
      } 
      return <Failed />;
    

    【讨论】:

      【解决方案2】:

      你没有正确检查ResultDisplay的prop。

        const isPassed = props.isPassed;
        if (isPassed) {
          return <Passed />;
        } 
        return <Failed />;
      

      isPassed 将是字符串“passpass”或“failfail”,但由于您的if 语句正在进行基本的等效检查,它会将您的两个字符串类型转换为true 布尔值。因此,您的 if 语句始终评估为 true 并且您始终返回 &lt;Passed /&gt;

      检查字符串等价性的正确方法是使用更严格的标识运算符 (===),它不会转换类型并确保您检查的是完全相同的字符串。

        const isPassed = props.isPassed;
        if (isPassed === "passpass") {
          return <Passed />;
        } 
        return <Failed />;
      

      您还需要确保您的Failed() 函数返回一些内容,否则将无法正常工作。

      function Passed(props) {
        return <div class="result-pass"><h3>passpass</h3></div>;
      }
      
      function Failed(props) {
        return <div class="result-fail"><h3>failfail</h3></div>;
      } 
      

      【讨论】:

      • 当我添加 ==="passpass" 我得到这个错误:“不变违规失败(...):没有从渲染返回。这通常意味着缺少返回语句。或者,不渲染,返回 null。”知道为什么吗?
      • @Amma 是的,因为您的 Failed 函数没有 return 语句。 :)
      • 就是这样 - 现在可以了,谢谢! codesandbox.io/s/j36935115w
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多