2015-09-02 46 views
6

我有一個彈出窗口的OAuth進程,但是當我登錄時,重定向到OAuth回調頁面會在彈出窗口而不是父窗口(window.opener)內發生。這可能有點不方便,但我想要一個彈出窗口告訴父母「我們是授權的!」的方式。在彈出窗口與父窗口通信的任何方法?

這其實工作原理:

OAuthCallback = React.createClass({ 
    displayName: 'OAuthCallback', 

    render() { 
    window.opener.console.log('hello parent window'); 

    return (
     <div> 
     Hi, OAuth is process is done. 
     </div> 
    ) 
    } 
}); 

但我不知道是否有一些方法可以讓我有彈出窗口告訴父窗口調用一個道具的功能,例如this.props.oauthSucceeded()

回答

10

當您無法在組件之間建立任何父子關係或兄弟關係時,React建議設置一個事件系統。

對於兩個組件之間的通信是沒有 父子關係,你可以建立自己的全球盛會 系統。訂閱componentDidMount()中的事件,在 componentWillUnmount()中取消訂閱,並在收到事件時調用setState()。通量模式是安排這種情況的可能方法之一。

看到https://facebook.github.io/react/tips/communicate-between-components.html

看一看window.postMessage跨窗口通信(https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

+1

雖然這超出了事件系統,但我正在談論一個訪問父窗口組件的彈出窗口,它實際上處於完全不同的狀態集合中。 – ffxsam

+1

它仍然可以通過跨窗口設置事件監聽器進行通信,編輯我的答案。 – Eelke

+0

這個回答非常有幫助,謝謝! – ffxsam

相關問題