javascript - JSX 中的虚假值 react

标签 javascript reactjs

我正在学习 reactJs 并尝试将属性传递给组件。

代码如下-

import React from 'react';
import ReactDOM from 'react-dom';

class myComponent extends React.Component {
    render() {
        if (this.props.signedIn == false) {
            return <h1>Hi</h1>;
        }
        return <h1>Hello!</h1>;
    }
}

ReactDOM.render(
    <myComponent signedIn={false} />,
    document.getElementById('app')
);

这行得通,但请注意我必须注入(inject) false 的部分,因为 javascript 包裹在花括号中。

我怀疑 JSX 是否不像普通 JS 那样将“false”字符串识别为假值?

询问的原因- 与隐藏元素的 ng-show="false"进行比较,但正如评论中所讨论的那样,这可能是因为 ng-show 指令手动将 'false' 评估为假值。

最佳答案

不要忘记修复组件名称,it should start with uppercase letters .


如其他评论和答案中所述,条件与 JSX 无关。这就是 JavaScript 的工作原理。

请注意,重要的事情要记住:
永远不要做双等号 (==) a.k.a "Abstract Equality"针对 bool 值,这是在寻找错误。

因为引擎只会对 bool 值进行类型强制,这可能会导致意外行为。

例如,

if(2 == true) //returns false

if(2 == false) // returns false

来自 spec :

If Type(x) is Boolean, return the result of the comparison ! ToNumber(x) == y.

If Type(y) is Boolean, return the result of the comparison x == ! ToNumber(y).

相反,您可以进行隐式检查:

if (this.props.signedIn)  

或显式检查但使用三重等于 a.k.a "strict equality"

if (this.props.signedIn === false)


至于react部分:同样,毕竟它基本上只是JavaScript函数和对象。
如果您没有传递 prop,那么它将是 undefined:

this.props.signedIn // signedIn will be undefined if we didn't pass it as a prop

所以,像上面提到的隐式检查:

if (this.props.signedIn) 

会工作得很好。


不传递 prop 的运行示例:

class MyComponent extends React.Component {
  render() {
    if (this.props.signedIn) {
      return <h1>Hi</h1>;
    }
    return <h1>not signed on!</h1>;
  }
}

ReactDOM.render(
  <MyComponent />,
  document.getElementById('root')
);
<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>

运行带有 false 的例子:

class MyComponent extends React.Component {
  render() {
    if (this.props.signedIn) {
      return <h1>Hi</h1>;
    }
    return <h1>not signed on!</h1>;
  }
}

ReactDOM.render(
  <MyComponent signedIn={false}/>,
  document.getElementById('root')
);
<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>

传入true的运行示例:

class MyComponent extends React.Component {
  render() {
    if (this.props.signedIn) {
      return <h1>Hi</h1>;
    }
    return <h1>not signed on!</h1>;
  }
}

ReactDOM.render(
  <MyComponent signedIn={true}/>,
  document.getElementById('root')
);
<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>

关于javascript - JSX 中的虚假值 react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48032855/

相关文章:

reactjs - 如何在reactjs类中访问mixin的类变量?

javascript - 如何访问对象变量的字段以作为 props 传递给其子组件?

reactjs - 为什么官方文档建议在 setState 中使用 componentDidMount 而不是回调?

javascript - 从下拉列表中选择选项时响应警告

javascript - 如何编写正则表达式来验证 4 个字符的字符串是否为非零二进制数?

javascript - 如何在表单输入中正确使用 ng-bind (单向绑定(bind))?

reactjs - 当变体是临时的时,样式化的 MUI 抽屉无法打开

javascript - 无法获取未定义或空引用的属性 'style',但可以在另一台服务器上使用

javascript - 使用 JSON 和 jquery 创建动态列表

reactjs - 获取用于分页 react 的 firestore 收集记录计数