4

我正在使用react-navigation:^1.0.0-beta.9有没有办法返回特定屏幕(不是当前屏幕的前一个屏幕)?我也将我react-navigation的与redux. 我查看了文档并看到它back接受一个key参数,但这对我来说并不清楚,并尝试以 Screen 的名称放置,back({ key: 'Screen B' })但它可能不起作用,因为它期望一个key随机生成的,除非特别指定。

例如我有这个StackNavigator

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

假设我目前正在工作Screen D,我想回到我将Screen B如何实现它?

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

4

1 回答 1

15

1.内部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

于 2017-07-14T08:26:06.270 回答