2015-12-03 85 views
0

我有一个组件,单击按钮时会打开一个模式,唯一需要的是我需要一个按钮来触发不同组件上的方法:使用React如何从另一个组件访问组件的方法

var QueueReveal = React.createClass({ 
    getInitialState: function() { 
     return { clock: "0H 0M 0S" } 
    }, 
    componentDidMount: function(e) { 
     $(document).foundation(); 
    }, 
    enterQueue: function(e) { 
     $('#Queue').foundation('open'); 
     // Start Timer 
    }, 
    leaveQueue: function(e) { 
     $('#Queue').foundation('close'); 
     var data = { 
      msgType: "LeaveQueue", 
      data: {} 
     } 
     queueConn.send(JSON.stringify(data)); 
    }, 
    render: function() { 
     return (
      <div> 
       <h1 className="text-center">You Are Now In Queue</h1> 
       <p className="text-center"><small>You will be notified when a potential party has been found</small></p> 
       <span className="line-breaker"></span> 
       <br/> 
       <h1 className="text-center">{this.props.counter}</h1> 
       <br/> 
       <a className="alert button expanded" onClick={this.leaveQueue}>Leave Queue</a> 
      </div> 
     ) 
    } 
}); 

ReactDOM.render(<QueueReveal/>, document.getElementById('Queue')); 

var EnterQueueButton = React.createClass({ 
    render: function() { 
     return (
      <a href="#" id="enterQueueButton"><i className="fa fa-clock-o"></i> Enter Queue</a> 

      // I would like this link to trigger `QueueReveal.enterQueue` 
     ) 
    } 
}) 

ReactDOM.render(<EnterQueueButton/>, document.getElementById('EnterQueueButton')); 

我想EnterQueueButton触发QueueReveal.enterQueue点击时,但我不完全确定如何去做这件事。

+0

可以肯定的是,它们是完全独立的组件吗?或者是在另一个内部渲染的? – nbermudezs

回答

0

如果它们是完全独立的组件,我会做的是使组件扩展EventEmitter(类似this),并让一个组件侦听一个事件,然后另一个组件触发它。

如果您可以重构代码以使其中一个组件可以使用引用。您可以通过提供ref密钥来指定组件的引用,然后通过this.refs.<the name you gate it>访问它,这是一个反应组件,因此您可以调用任何您想要的组件。请参见this

相关问题