2017-02-06 5 views
0

Ich baue meine erste react native App mit redux.Wie kann man Redux-Speicher von nicht reagierenden Komponenten lesen?

My store Konfiguration ist wie folgt:

function configureStore(onComplete: ?() => void) { 
    const store = autoRehydrate()(createMyAppStore)(reducers); 
    persistStore(store, {storage: AsyncStorage}, onComplete); 
    if (isDebuggingInChrome) { 
    window.store = store; 
    } 
    return store; 
} 

Ich habe eine Authentifizierungs action wie folgt

export function authentiate(credentials) { 
    return (dispatch) => { 
    return LoginApi.authenticate(credentials) 
    .then(response => { 
     return response.json().then(function(json) { 
      dispatch(onAuthSuccess(json)); 
     }); 
    }) 
    .then(response => { dispatch(getUserInfo()); }) 
    .catch(error => { 
     throw(error); 
    }); 
    }; 
} 

My getUserInfoaction ist als

folgt
export function getUserInfo() { 
    return (dispatch) => { 
    return LoginApi.gerUserInfo() 
    .then(result => { dispatch(onGetUserInfoSuccess(result.json())); }) 
    .catch(error => { 
     throw(error); 
    }); 
    }; 
} 

My Authentifizierungs Minderer wie folgt ist

function auth(state: State = initialState, action: Action): State { 
    switch (action.type) { 
    case types.AUTH_SUCCESSFUL : 
    return [...state, Object.assign({}, action.auth)]; 
    default : 
    return state; 
    } 
    return state; 
} 

Die LoginApi ist eine einfache ES6 Klasse. Die getUserInfo erfordert Details wie access token und andere Parameter erhalten von der LoginApi.authenticate Aufruf.

Wie lese ich die Authentifizierungsinformationen aus der redux store von einer non-react Komponente?

Antwort

1

Das zweite Argument von redux-Thunk ist getState

export function getUserInfo() { 
    return (dispatch, getState) => { 
    const state = getState() // or cherry pick what you need 
    return LoginApi.gerUserInfo(state) 
    .then(result => { dispatch(onGetUserInfoSuccess(result.json())); }) 
    .catch(error => { 
     throw(error); 
    }); 
    }; 
} 

https://github.com/gaearon/redux-thunk#composition

die nur die Funktion s eigene getStatestore ist.

http://redux.js.org/docs/api/Store.html#getState

Sie exportieren/importieren Sie Ihre store und rufen getState direkt, wenn Sie wollen.

let store = createStore(...) 
export { store } 

// anywhere.js 
import { store } from './your-store.js' 
let state = store.getState() 
+0

Also bedeutet das, ich kann nicht auf den Laden/Staat aus irgendwelchen nicht reagierenden Komponenten zugreifen. Stattdessen sollte ich von der Aktion auf sie zugreifen und sie als Parameter an die externen Komponenten übergeben? –

+0

Wenn Sie Ihren 'Speicher' exportieren (den, den Sie mit' createStore() 'erstellt haben), können Sie ihn dort importieren, wo Sie möchten, und' store.getState() 'aufrufen. muss nicht Bestandteil sein. In Ihrem Beispiel wurde jedoch ein Redux-Thunk verwendet, der bereits auf den Store zugreifen kann. Es liegt an dir – azium

Verwandte Themen