【问题标题】:React-Native Redux Navigation Go back to first page ProblemReact-Native Redux Navigation 返回第一页 问题
【发布时间】:2018-09-18 05:29:32
【问题描述】:

首先对不起我的英语不好。

我正在使用 React-native 构建应用程序。对于导航,我使用 redux 模式。

我有大问题,不明白发生了什么。

首先我有我的组件导航器:

import React from 'react';
import {
    createStackNavigator,
    createSwitchNavigator,
    createBottomTabNavigator
} from 'react-navigation';
import { connect } from 'react-redux';
import Login from '../auth/login';
import CreateTrip from '../trip/create';
import DeleteTrip from '../trip/delete';
import Signup from '../signup/signup';
import Trip from '../trip/index';
import Secured from '../home/home';
import ConfirmIdentity from '../confirmIdentity';
import {createReactNavigationReduxMiddleware, reduxifyNavigator} from "react-navigation-redux-helpers";

const middleware = createReactNavigationReduxMiddleware(
    'root',
    state => state.nav
);

const RootNavigator = createStackNavigator({
        loginFlow: {
            screen: createBottomTabNavigator({
                    Login: {screen: Login , navigationOptions: { tabBarVisible: false }},
                    Register: {screen: Signup , navigationOptions: { tabBarVisible: false }},
                },
                {initialRouteName: 'Login'})
        },
        homeFlow: {
            screen: createBottomTabNavigator({ Dashboard: {screen: Secured},
                Trip: {screen: Trip, navigationOptions: { tabBarVisible: false }},
                ConfirmIdentity: {screen: ConfirmIdentity,  navigationOptions: { tabBarVisible: false }},}),
        },
        tripFlow: {
            screen: createSwitchNavigator({
                    CreateTrip: {screen: CreateTrip},
                    DeleteTrip: {screen: DeleteTrip}
                },
                {initialRouteName: 'CreateTrip'})
        }
    },
    {navigationOptions: {header: null}});

const AppWithNavigationState = reduxifyNavigator(RootNavigator, 'root');

const mapStateToProps = state => ({
    state: state.nav,
});

const AppNavigator = connect(mapStateToProps)(AppWithNavigationState);

export { RootNavigator, AppNavigator, middleware };

我的减速器导航:

import { NavigationActions } from 'react-navigation';
import { RootNavigator } from '../../components/navigator/navigation';
const initialNavState = RootNavigator.router.getStateForAction(NavigationActions.navigate({ routeName: 'Login' }));

function navAuthReducer(state = initialNavState, action) {
    let nextState;
    RootNavigator.router.display = false;
    console.log(action.type);
    switch (action.type) {
        case 'LOGIN':
            nextState = RootNavigator.router.getStateForAction(
                NavigationActions.navigate({ routeName: 'Dashboard' }),
                state
            );
            break;
        case 'LOGOUT':
            nextState = RootNavigator.router.getStateForAction(
                NavigationActions.navigate({ routeName: 'Login' }),
                state
            );
            break;
        case 'GOREG':
            nextState = RootNavigator.router.getStateForAction(
                NavigationActions.navigate({ routeName: 'Register' }),
                state
            );
            break;
        case 'CREATE':
            nextState = RootNavigator.router.getStateForAction(NavigationActions.navigate({ routeName: 'CreateTrip' },
                state
            ));
            break;
        case 'DELETE':
            nextState = RootNavigator.router.getStateForAction(
                NavigationActions.navigate({ routeName: 'DeleteTrip' }),
                state
            );
            break;
        default:
            nextState = RootNavigator.router.getStateForAction(action, state);
            break;
    }

    // Simply return the original `state` if `nextState` is null or undefined.
    return nextState || state;
}

export default navAuthReducer;

这是我的旅行索引。这个页面我可以点击按钮继续CREATE吗:

import {Component} from "react";
import connect from "react-redux/es/connect/connect";
import React from "react";
import {Button, ScrollView, Text} from "react-native";
import {creatingTrip} from "../../actions/trip";

class Index extends Component {

    createTrip(e) {
        e.preventDefault();
        this.props.onCreateTrip();
    }
    render() {
        return (
            <ScrollView>
                <Text>${this.props.isCountryExist}</Text>
                <Button onPress={(e) => this.createTrip(e)} title="Logout"/>
            </ScrollView>
        );
    }
}

const mapStateToProps = (state, ownProps) => {
    return {
        isCountryExist: state.tripReducer.isCountryExist
    };
};

const mapDispatchToProps = (dispatch) => {
    return {
        onCreateTrip: () => { dispatch(creatingTrip()); }
    }
};

export default connect(mapStateToProps, mapDispatchToProps)(Index);

当我要进行 CREATE 案例时,我不知道为什么我的应用会显示登录页面。

我做的事情:

  • 检查类型值,它是“CREATE”。
  • 在网上寻找解决方案
  • 完全重写文件
  • 使用 console.log 进行调试以了解行为

感谢您的所有回答。

enter image description here

【问题讨论】:

    标签: react-native redux react-navigation


    【解决方案1】:

    问题出在这一行:

    nextState = RootNavigator.router.getStateForAction(
    NavigationActions.navigate({ routeName: 'CreateTrip' },
    state));
    

    括号没放好。

    nextState = RootNavigator.router.getStateForAction(
    NavigationActions.navigate({ routeName: 'CreateTrip' }),
    state);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 2017-11-28
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2020-11-25
      相关资源
      最近更新 更多