2016-03-01 115 views
0

当我点击触发{this.subscribe}的按钮时,我想将该按钮上的HTML更改为'取消订阅',再次单击时更改回'订阅'。任何帮助在这里大大赞赏。我得到这个与AutoVars一起工作,但在使用ReactiveVar时遇到了麻烦。任何帮助非常感谢。在流星/反应中使用ReactiveVars

Header = React.createClass({ 
    mixins: [ReactMeteorData], 

    getInitialState: function(){ 
    Meteor.subscribe('directory'); 
    var subscribeText = new ReactiveVar('UnSubscribe'); 
    return { 
     subscribeText: subscribeText 
    }; 
    }, 

    getMeteorData: function() { 
    var subscribeBoolean = false; 
    var subscribeText = this.state.subscribeText.get(); 
    return { 
     subscribeBoolean: subscribeBoolean, 
     subscribeText: subscribeText 
    }; 
    }, 


    subscribe: function(){ 
    //Meteor.users.update({_id: Meteor.user()._id}, {$set:{"profile.name": "Carlos"}}); 
    if (this.data.subscribeBoolean === true) { 
     this.data.subscribeBoolean = false; 
     this.data.subscribeText = "Subscribe"; 
    } 
    else { 
     this.data.subscribeBoolean = true; 
     this.data.subscribeText = "UnSubscribe"; 
    } 
return { 
}; 
    }, 
    render: function() { 
    //Move this into getMeteorData so that the HTML is grabbing straight 
//from the getMeteorData 
return (
<nav className="navbar navbar-default"> 
    <div className="container-fluid"> 
     <div className="navbar-header"> 
     <a className="navbar-brand" href="#">Reddit Clone</a> 
     </div> 

    <ul className="nav navbar-nav"> 
    <li className="active"><a href="#">Link <span className="sr-only">(current)</span></a></li> 
    <li><a href="#">Link</a></li> 
    </ul> 
    <ul className="nav navbar-nav navbar-right"> 
    <li> 
     <button onClick={this.subscribe}> 
     {this.data.subscribeText} 
     </button> 
    </li> 
    <li> <AccountsUIWrapper align="right" /> </li> 
    </ul> 

回答

1

您需要使用set方法设置在ReactiveVar数据。

因此,例如,

this.data.subscribeText = "Subscribe"; 

将变为:

this.data.subscribeText.set("Subscribe"); 
+0

现在我得到 '遗漏的类型错误:this.data.subscribeText.set不是一个函数' 我绝对有安装包虽然 – ChrisWilson

+0

我移动了var subscribeText = this.data.subscribeText.get();进入回报,不再收到错误,但仍未看到HTML更改。思考? – ChrisWilson

+0

不幸的是,我不知道React是如何工作的,所以我无法自己解决问题。不过,我的猜测是,对'subscribeText'的引用正在变得混乱。您应该在代码的每个部分都可以访问它的地方定义它。 –