使用React如何从另一个组件访问组件的方法

时间:2015-12-03 02:57:57

标签: javascript reactjs

我有一个组件,单击一个按钮时会打开一个模态,唯一的问题是我需要一个按钮来触发另一个组件上的方法:

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,但我不确定如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

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

如果您可以重构代码以将一个组件放在另一个组件中,则可以使用引用。您可以通过提供ref密钥为组件分配引用,然后通过this.refs.<the name you gate it>访问它,这是一个反应组件,因此您可以在其中调用所需的任何内容。见this