【问题标题】:how to pass action type redux in react navigation?如何在反应导航中传递动作类型redux?
【发布时间】:2017-05-27 07:44:35
【问题描述】:

如何在登录成功时通过redux反应导航传递动作类型?

这是我的代码...

import { Login } from '../constant/Constant'

import { NavigationActions } from "react-navigation";
import dispatch from "redux/es/createStore";

export function login(data) {
    if (data.email === 'me') {
        //NavigationActions.navigate({ routeName: 'Route' });
        console.log("login success");
        return (dispatch) => {
            dispatch({type: 'Login'});
        };
    }else{
        console.log("login error");
    }
}

这是我的reducer.js,以及如何将动作登录传递到这里,我在登录成功时尝试自己但无法将动作类型登录传递到这里

import { combineReducers } from 'redux';
import { NavigationActions } from 'react-navigation';
import { AppNavigator } from '../navigators/AppNavigator';
import { reducer as formReducer } from 'redux-form'
const firstAction       = AppNavigator.router.getActionForPathAndParams('Main');
const tempNavState      = AppNavigator.router.getStateForAction(firstAction);
const secondAction      =     AppNavigator.router.getActionForPathAndParams('Login');
const initialNavState   = AppNavigator.router.getStateForAction(
    secondAction,
    tempNavState
)

function nav(state = initialNavState, action) {
    let nextState;
    switch (action.type){
        case 'Login':
            nextState = AppNavigator.router.getStateForAction(
                NavigationActions.back(),
                state
            );
            break;
        case 'Logout':
            nextState = AppNavigator.router.getStateForAction(
                NavigationActions.navigate({routeName: 'Login'}),
                state
            );
            break;
        default:
            nextState = AppNavigator.router.getStateForAction(action, state);
            break;

    }

    return nextState || state;
}

const initialAuthState  = { isLoggedIn: false };

//如何将登录名从action.js传递到这里

function auth(state = initialAuthState, action) {
    switch (action.type){
        case 'Login':
            console.log(action.type);
            return { ...state, isLoggedIn:true };
        case 'Logout':
            return { ...state, isLoggedIn:false};
        default:
            return state;
    }
}

const AppReducer = combineReducers({
    nav,
    auth,
    form: formReducer
})

export default AppReducer;

【问题讨论】:

    标签: react-native react-redux react-native-android react-navigation


    【解决方案1】:

    你能粘贴redux/es/createStore吗,想看看dispatch方法是如何被导出的

    而你可以做的是:

    export function login(data) {
        if (data.email === 'me') {
            dispatch({type: 'Login'});
        }else{
            console.log("login error");
        }
    }
    

    看看http://redux.js.org/docs/basics/Store.html,我在你的代码中没有看到任何store

    将reducer合并到store后,你可以做这样的事情

    import { createStore } from 'redux'
    
    let store = createStore(reducers); //connecting reducers to store
    
    .
    ..
    ...
    
    export dispatch = (action) => store.dispatch(action); 
    

    【讨论】:

    • 我在 app.js 中的商店...我的问题是为什么当我成功登录时,无法在我的减速器中发送类型:'Login'...当我单击按钮然后发送类型时它可以工作: '登录',但登录成功时无法发送类型:'登录'
    猜你喜欢
    • 2020-05-13
    • 2017-07-31
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多