2017-01-13 51 views
0

我使用react-native-router-flux,這是我的路由一段代碼:通話功能時,另外一個

<Router navigationBarStyle={navBar} sceneStyle={{ paddingTop: 53}}> 
    <Scene key="main">  
    <Scene 
     key="firstPage" 
     component={FirstPage} 
     initial 
    /> 

    <Scene 
     key="secondPage" 
     component={SecondPage} 
    /> 
    </Scene> 
</Router> 

這是FirstPage組件的一部分:

class FirstPage extends Component { 
    constructor(props) { 
    console.log("constructor"); 
    super(props); 
    } 

    componentWillMount(){ 
    console.log("COMPONENT WILL MOUNT"); 
    } 

    componentDidMount(){ 
    console.log("COMPONENT DID MOUNT"); 
    } 

    componentWillReceiveProps(){ 
    console.log("COMPONENT WILL RECEIVE PROPS"); 
    } 

    shouldComponentUpdate(){ 
    console.log("SHOULD COMPONENT UPDATE") 
    } 

    componentDidUpdate(){ 
    console.log("COMPONENT DID UPDATE"); 
    } 

    componentWillUnmount(){ 
    console.log("COMPONENT WILL UNMOUNT"); 
    } 
} 

一旦我打開我的應用程序FirstPage組件加載,我得到這個由console.log S:

COMPONENT WILL MOUNT 
COMPONENT DID MOUNT 
SHOULD COMPONENT UPDATE 

當我點擊一個按鈕,把我送到secondPage鍵,加載SecondPage,組件console.logs給我這個:

COMPONENT WILL RECEIVE PROPS 
SHOULD COMPONENT UPDATE 

直到這裏,這一切都好。我想要的是,只要我從SecondPage回到FirstPage就能觸發一個功能。 當我回到FirstPage時,不會觸發構造函數componentWillMount,componentDidMount等等。

我該如何解決這個問題?

回答

0

這可能看起來有點反模式,如果您不想包含狀態容器,它可能不適合您的設置,但建議將您的應用程序綁定到偵聽當前更改的reducer現場。例如,通過使用redux,您可以按照docs中的示例輕鬆完成此操作。

然後,每次應用程序的場景發生變化時,都會觸發縮減器,並且通過這些信息,我認爲您可以應用任何自定義邏輯。你不應該在reducer中這樣做(這是反模式位),但是你可以做的是將這個值傳遞給你的組件,並觀察propcomponentWillReceiveProps或任何其他適當的生命週期方法。通過比較nextProps和您當前的props,您可以推斷出用戶做了什麼。

這有點不好意思,但它可能會完成這項工作。