代码之家  ›  专栏  ›  技术社区  ›  4cody

JSX中不能识别布尔值?

  •  2
  • 4cody  · 技术社区  · 6 年前

    我有一个多选的琐事游戏,我将一个布尔值true或false传递给一个自定义数据属性。在各个答案组件中更正。

    当点击答案时,我正在运行一个检查,看看正确的属性值是true还是false。

    以下是其中一个答案

    <Answer 
        onClick={this.answerClick}
        onMouseEnter={this.hoverEnter} 
        onMouseLeave={this.hoverLeave} 
        correct={this.state.correctAnswer.a1}>
        {this.state.answerSet.a1}
    </Answer>

    这里是答案组件本身

    const answer = (props) => (
        <div         
            className={classes.Answer}
            onMouseEnter={props.onMouseEnter} 
            onMouseLeave={props.onMouseLeave}
            onClick={props.onClick}
            data-correct={props.correct}>
            {props.children}
        </div>
    )

    因此,单击i check查看data correct属性是否有true或false值。

    answerClick(e) {
        console.log(e.target.dataset.correct)
        if(e.target.dataset.correct === true) {
            this.setState({ score: this.state.score +1, level: this.state.level +1})
            console.log('you have answered correctly')
        } else {
            this.setState({ level: this.state.level +1 })
            console.log('you have answered incorrectly')
        }
    }

    即使选择了正确的答案,它也只会注册一个错误的答案。我知道data correct包含true的值,因为

    console.log(e.target.dataset.correct)
    

    是否发生了我不知道的jsx/反应行为?为什么只有当data correct的值为true时,才会默认为else?任何帮助都很好。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Alan Friedman    6 年前

    dom属性是作为字符串读取的,而不是布尔值。

    if(e.target.dataset.correct === 'true') {...}