为什么反应原生<文字>组件不显示布尔道具?

时间:2017-04-20 21:14:50

标签: react-native

使用RN标准<文字>使用此代码的组件我看到"调试模式:" 仅限文本(但预期:"调试模式:true" )。

class ClassName extends Component {

  static propTypes = {
    debug: PropTypes.bool
  };

  render() {
    return (
      <View style={...}>
        <Text>Debug mode: {this.props.debug}</Text>
      </View>
    )
  }
}

const mapStateToProps = (state) => {
  console.log(typeof(state.debug); //boolean
  return {
    debug: state.debug
  }
}

export default connect(mapStateToProps)(ClassName);

截图:

enter image description here

如上所述&#34; state.debug&#34;是布尔类型:

console.log(typeof(state.debug)); //boolean

问题 - 为什么布尔道具没有显示/渲染?

1 个答案:

答案 0 :(得分:9)

因为JSX的设计是这样的。根据{{​​3}}:

  

falsenullundefinedtrue是有效的孩子。他们根本就不渲染。这些JSX表达式将呈现相同的东西:

<div />
<div></div>
<div>{false}</div>
<div>{null}</div>
<div>{undefined}</div>    
<div>{true}</div>
     

...

     

相反,如果您希望输出中显示falsetruenullundefined等值,则必须先将其转换为字符串:

<div>
  My JavaScript variable is {String(myVariable)}.
</div>

所以它不仅仅是关于React Native。这就是React的工作方式。

我不确定这个设计决定的原因,但是条件渲染不会呈现false是很方便的:

{items.length > 0 && <ul>{items.map(item => <li>{item}</li>)}</ul>}

true未呈现时,false无法呈现。