在HTML中反应三元运算符不能呈现正确的HTML

时间:2018-05-06 22:37:10

标签: javascript reactjs ternary-operator

我对React很新,并且对我认为简单的三元运算符有些麻烦。我只是尝试默认显示一个减号,并在点击时显示一个加号。我在我的JSX中编写了一个三元运算符,并将组件的初始状态设置为false,boolean,并在单击时将其切换。看起来很简单。

默认情况下,该页面会显示一个加号,但我不确定原因。当我点击它时,它没有改变,我在代码中的console.log显示布尔值。任何人都知道什么是什么?提前致谢。这是我的组件的代码:

import React, { Component } from 'react';

class Header extends Component {
    constructor(props) {
        super(props);

        this.state = {
            showMinus: false,
        };


        this.changeSign = () => {
            this.state.showMinus = !this.state.showMinus;
            console.log('CLICKED ', this.state.showMinus);
        }
    };

    render() {
        return (
            <div className="header">
                <div>State: {this.state.showMinus}</div>
                <div>30%</div>
                <div>$200000</div>
                <div>85%</div>
                <div>
                    {this.state.showMinus ? <span className="plusOrMinus" onClick={this.changeSign}> - </span>
                        :
                    <span className="plusOrMinus" onClick={this.changeSign}> + </span>}
                </div>
            </div>
        );
    }
}

export default Header;

2 个答案:

答案 0 :(得分:2)

Reactjs是一种函数式编程风格,其目的是让代码保持不变。 React有一种使用setState function设置状态的方法。你在这一行this.state.showMinus = !this.state.showMinus;正在做的是改变你的状态,这不会引发反应的重新出现。

将该行代码更改为:this.setState({ showMinus: !this.state.showMinus }),它应该有效。

答案 1 :(得分:1)

您的代码中几乎没有问题。要更新状态,请始终使用this.setState

import React, { Component } from 'react';

    class Header extends Component {
        constructor(props) {
            super(props);

            this.state = {
                showMinus: false,
            };


            changeSign = () => {
                this.setState({ showMinus = !this.state.showMinus })
                console.log('CLICKED ', this.state.showMinus);
            }
        };

        render() {
            return (
                <div className="header">
                    <div>State: {this.state.showMinus}</div>
                    <div>30%</div>
                    <div>$200000</div>
                    <div>85%</div>
                    <div>
                        {this.state.showMinus ?  <span className="plusOrMinus" onClick={this.changeSign}> + </span>
                            : <span className="plusOrMinus" onClick={this.changeSign}> - </span>
                       }
                    </div>
                </div>
            );
        }
    }

    export default Header;