React Navigation,如何返回特定屏幕?

时间:2017-06-12 02:45:42

标签: javascript react-native react-navigation expo

我使用react-navigation:^1.0.0-beta.9是否有办法返回特定屏幕(不是前一个屏幕)?我还将react-navigationredux进行了整合。我查看了文档并看到back接受了key param,但这对我来说并不清楚,并尝试将其放在屏幕名称中,如back({ key: 'Screen B' })但它没有&# 39;工作可能是因为它期望key是随机生成的,除非特别指明。

例如,我有StackNavigator

Screen A
- Screen B
  - Screen C
    - Screen D (Current)

让我们说我目前正在Screen D,我想回到Screen B我将如何实现它?

我不想使用navigation.navigate('Screen B'),因为它会在堆栈中添加另一个屏幕,而不是我期待的。

1 个答案:

答案 0 :(得分:14)

1.Inside screen D发送一些行动:

    const {navigation} = this.props;
    navigation.dispatch({
        routeName: 'B',
        type: 'GoToRoute',
    });

2.在MyStackNavigator.js中处理此操作

const MyStackNavigator = new StackNavigator(//...);
const defaultGetStateForAction = MyStackNavigator.router.getStateForAction;
MyStackNavigator.router.getStateForAction = (action, state) => {            
    if (state && action.type === 'GoToRoute') {           
        let index = state.routes.findIndex((item) => {
            return item.routeName === action.routeName
        });
        const routes = state.routes.slice(0, index+1);
        return {
            routes,
            index
        };    
    }       
    return defaultGetStateForAction(action, state);
};

然后您可以直接从screen D转到screen B