2017-11-13 2 views
0

Ich versuche, zum Hauptbildschirm zu navigieren und Code funktioniert immer noch gut, wenn der JS DEBUGGER eingeschaltet ist (läuft), aber das Problem ist, wenn ich versuche, meine Anwendung zu starten, wenn JS DEBUGGER OFF ist deaktivieren) und versuchen, sich zu diesem Zeitpunkt anzumelden "yield put (NavigationActions.navigate ({routeName: 'Main'}));" Dieser Stückcode leitet nicht zum Hauptbildschirm um.Navigation funktioniert nicht mit redux-saga

unten ist mein Code:

import { NavigationActions } from 'react-navigation'; 
import { call, put, takeEvery, take } from 'redux-saga/effects'; 
import { getFirebase } from 'react-redux-firebase'; 

export function* watchLoginAsync({email, password}) { 
    try { 
    const response = yield getFirebase().login({email,password}); 
    if (response.uid) { 
     // dispatchToMain(); 
     yield put(NavigationActions.navigate({ routeName: 'Main' })); 
     // yield put({type: LOGIN_SUCCESS }); 
    } else { 
     yield put({type: LOGIN_FAIL, error: 'Something went wrong seriously!!'}); 
    } 
    } catch(err => console.log(err)) 
} 

export default function* watchLogin() { 
    yield takeEvery(LOGIN_REQUESTING, watchLoginAsync); 
} 

Und die store.js-Datei (wo i redux-Saga integriert haben, reagieren mit-redux-Feuerbasis)

const sagaMiddleware = createSagaMiddleware(); 
const middleware = [ sagaMiddleware ]; 

const firebaseConfig = { 
apiKey: '******', 
authDomain: '****', 
databaseURL: '****', 
projectId: '****', 
storageBucket: '****', 
messagingSenderId: '****', 
}; 

const reduxFirebaseConfig = { 
userProfile: 'users', 
enableLogging: true, 
enableRedirectHandling: false, 
}; 

// Add redux Firebase to compose 
const createStoreWithFirebase = compose(
reactReduxFirebase(fbConfig, reduxFirebaseConfig), 
applyMiddleware(...middleware) 
)(createStore); 

// Add Firebase to reducers 
const rootReducer = combineReducers({ 
firebase: firebaseStateReducer, 
...... 
}); 

// Create store with reducers and initial state 
const initialState = {} 
export default createStoreWithFirebase(rootReducer, initialState); 

// when calling saga, pass getFirebase 
sagaMiddleware.run(Sagas, getFirebase) 

HINWEIS: Code funktioniert einwandfrei, wenn JS DEBUGGER im iOS-Simulator aktiv ist, während die App läuft.

+0

sind u loggerMiddleware mit ?? .. Ich hatte einige Probleme im Emulator .. Sie müssen auf den Bildschirm klicken, um Aktionen im Emulator auszulösen, wenn Reduction Logger und Debuggen eingeschaltet ist. – Vicky

+0

Nein, ich benutze keine Logger Middleware, aber sehen Sie, können Sie auf meine Redux-Saga store.js Datei Ich denke, das passiert, weil etwas in 'reduxFirebaseConfig' falsch ist. –

Antwort

0

HINWEIS: Der Code funktioniert einwandfrei, wenn JS DEBUGGER im iOS-Simulator aktiv ist, während die Anwendung ausgeführt wird.

Im Allgemeinen unterscheidet sich der Debugging-Modus von der normalen Ausführung durch Timings - z. Im Debug-Modus wird eine asynchrone Aktion ausgeführt, während Sie die Werte auf dem Haltepunkt beobachten, und auch die Ausführung im Debug-Modus ist aufgrund der Interception ES262-Engine-Aktionen wesentlich langsamer. Sie können versuchen, ausführlicher zu debuggen, indem Sie console.log Anweisungen verwenden.

Auch geliefert Quellcode

const createStoreWithFirebase = compose(
reactReduxFirebase(fbConfig, reduxFirebaseConfig), 
applyMiddleware(...middleware) 
)(createStore); 

nicht zwingend saga anfänglichen invoke Betrieb enthält, wie sagaMiddleware.run(rootSaga), was ist, warum vielleicht nichts ausgeführt.

In Originaldokumentation ist es vorhanden: https://github.com/prescottprue/react-redux-firebase/blob/master/docs/recipes/redux-saga.md

+0

Entschuldigung, ich habe vergessen, den ganzen Dateicode hinzuzufügen, stattdessen habe ich Code hinzugefügt, den ich dachte, ist obligatorisch. aber ich habe include sagaMiddleware.run (rootSaga). –

+0

irgendwelche Lösungen? –

Verwandte Themen