Navigation 說明


三種模式

StackNavigator(單頁進行)

export const SettingStack = StackNavigator({
    Settings: {
        screen: Settings,
        navigationOptions: {
            title: 'Settings'
        }
    }
});
export default StackNavigator({
    Login: {
        screen: Login,
        navigationOptions: ({ navigation }) => {
            return {
                title: 'Login',
                headerRight: (
                    <Button title={'New'} onPress={()=> navigation.navigate('NewBlogs)} />
                )
            }
        }
    },
    Blogs: {
        navigationOptions: {
             title: 'Blogs'   
        }
    },
    NewBlogs: {
        navigationOptions: {
             title: 'NewBlogs'   
        }
    }
});

TabNavigator(分頁進行)

export const Tabs = TabNavigator({
    Feed: {
        screen: FeedStack,
        navigationOptions: {
            tabBar: {
                label: 'Feed',
                icon: ({ tintColor}) => <Icon name="list" size={35} .... />
            }
        }
    },
    Me: {
        screen: Me,
        navigationOptions: {
            tabBar: {
                label: 'Me',
                icon: ({ tintColor}) => <Icon name="list" size={35} .... />
            }
        }
    }
});

DrawerNavigator(空白單頁)

操作方式

返回頁面

this.props.navigation.goBack(screen1Key) brings you to screen0.
this.props.navigation.goBack(screen5Key) brings you to screen4.
this.props.navigation.goBack();
this.props.navigation.goBack(null);

取得 key

const { state } = navigation;
const currentRouteKey = state.routes[state.index].key;

reset

navigation.dispatch(
              NavigationActions.reset({
                index: 0,
                key: null,
                actions: [
                  NavigationActions.navigate({
                    routeName: "Tabs",
                    action: NavigationActions.navigate({
                      routeName: "MessageList",
                      action: NavigationActions.navigate({
                        routeName: "Details",
                        params: { ...users[0] }
                      })
                    })
                  })
                ]
              })
            );

or

navigation.dispatch(
              NavigationActions.reset({
                index: 0,
                key: null,
                actions: [
                  NavigationActions.navigate({
                    routeName: "Tabs",
                    action: NavigationActions.navigate({
                      routeName: "Details",
                      params: { ...users[0] }
                    })
                  })
                ]
              })
            );

reaplce 方式,需要自定,reset,會重新執行,所以要用 repalce

import type {NavigationAction,NavigationState} from "react-navigation/lib/TypeDefinition";

import NavigationActions from "react-navigation/lib/NavigationActions";

const updateStackRouter = function (StackNavigator: any) {

const parentGetStateForAction = StackNavigator.router.getStateForAction;

StackNavigator.router.getStateForAction = function (action:NavigationAction,inputState?: ?NavigationState): ?NavigationState {

    const state: ? NavigationState = parentGetStateForAction(action, inputState);

    if (state && action.type === NavigationActions.NAVIGATE) {
        if (action.params && action.params.replaceRoute) {
            //replaceRoute值 仅仅作为一个标识,进到这个方法之后就没有作用了
            delete action.params.replaceRoute;
            if (state.routes.length > 1 && state.index > 0) {
                const oldIndex = state.index - 1;
                // 移除替换
                state.routes.splice(oldIndex, 1);
                //index现在就减少了一个
                state.index = oldIndex;
            }
        }
    }

    return state;
  };
};

export default updateStackRouter;

//使用方式
1.updateStackRouter(AppNavigator);         //参数为StackNavigator

2.this.props.navigation.navigate('Home',
            {
                replaceRoute: true,
                userName: 'erBai'
            }
        );

作者:黄二白
链接:http://www.jianshu.com/p/a4c8cbbabbaf
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

接受參數

const { params } = this.props.navigation.state;

this.state = {
    data: params
};

results matching ""

    No results matching ""