2017-08-04 62 views
0

所以我有這樣的反應,導航設置:React導航如何通過父導航到兒童?

Stack navigator 
|Tab navigator 
| | Screen_A 
| | Screen_B 
| Screen_C 
| Screen_D 

正常情況下,用戶會去屏幕,然後單擊轉到屏幕下與一些PARAMS。在屏幕B中,用戶點擊以轉到屏幕D.現在在屏幕D上,當用戶點擊時,我需要他去屏幕C但通過屏幕A(因爲當用戶從C點擊時,他們需要返回屏幕一個)。

我試圖從屏幕D傳遞參數到屏幕A,並在A的render()方法中檢查參數並繼續導航到屏幕C,並且它可以工作。但我得到了警告,所以我怎麼能做到這一點,而不會觸發任何警告「可以將現有的狀態過渡期間(如在‘渲染’......不更新」?

感謝

回答

0

另一種可能的解決辦法是利用定製的stack router,在這裏我想出了一個可能的解決方案:

在這種情況下,當您從ScreenD導航到ScreenC時,您可以直接導航到ScreenC,但是當ScreenC上的用戶嘗試去我們會將ScreenA插入堆棧,以便用戶可以看到ScreenA而不是ScreenD。

const NestedNavigator = TabNavigator({ 
    ScreenA: { screen: ScreenA }, 
    ScreenB: { screen: ScreenB }, 
}); 

const MainNavigator = StackNavigator({ 
    Home: { 
    screen: NestedNavigator 
    }, 
    ScreenC: { screen: ScreenC }, 
    ScreenD: { screen: ScreenD }, 
}); 

const defaultGetStateForAction = MainNavigator.router.getStateForAction; 

MainNavigator.router.getStateForAction = (action, state) => { 
    if (state && action.type === 'Navigation/BACK' && state.routes[state.index].routeName === 'ScreenC') { 
    const routes = [ 
     ...state.routes, 
     {index: 0, key: 'ScreenA', routeName: 'Home', routes: [{ key: 'ScreenA', routeName: 'ScreenA'}, { key: 'ScreenB', routeName: 'ScreenB' }]}, 
    ]; 
    return { 
     ...state, 
     routes, 
     index: routes.length - 1, 
    }; 
    } 
    return defaultGetStateForAction(action, state); 
};