setState不适用于React和Meteor中的UI更改

时间:2015-10-19 21:34:10

标签: javascript meteor reactjs setstate

我正在尝试使用按钮切换UI显示。当用户单击按钮时,它将显示相应的UI。当用户再次点击时会隐藏它。我使用setState来切换" showItemBank"的值,但UI只显示一次,然后返回默认的不可见。我错过了一些重要的事情吗?

这是使用Meteor和React的我的应用程序的jsx。

App = React.createClass ({

mixins: [ReactMeteorData],

getInitialState() {
    return {
      showItemBank: false
    }
},

onItemBankClick(event) {
    this.setState({
        showItemBank : ! this.state.showItemBank
    });

},

render() {
    var classItemBank = ""; 
    var classNewQuestion = ""; 
    if(this.state.showItemBank === false){ 
        classItemBank = "displayNone"; 
    } 
    if(this.state.showItemBank === true){ 
        classItemBank = "displayContent"; 
    }

    return (
        <div className="container">
            <header>
                <form className="new-task" >
                    <div>
                        <button onClick={this.onItemBankClick} className="menu">Select From the Item Bank</button>
                        <button className="menu">Add New Questions</button>
                    </div>
                    <div className={classItemBank}> Hi i am from ItemBank </div>    
                </form>

            </header>
        </div>
    );
}

  });

2 个答案:

答案 0 :(得分:2)

试试这个

onItemBankClick(event) {
    event.preventDefault();
    this.setState({
        showItemBank : ! this.state.showItemBank
    });

}

按钮会尝试默认提交页面

答案 1 :(得分:1)

onItemBankClick(event) {

 // stop the event bubbling to parent, in this case <form>
 event.stopPropagation(); 

 // prevent default browser action
 event.preventDefault();

 this.setState({
    showItemBank : ! this.state.showItemBank
 });

}