Ich bin neu in der Verwendung von Redux und Thunk und ich brauche Hilfe, es ist ein sehr verwirrendes Konzept für mich. Ich habe mehrere Tutorials und Videos verfolgt und mit der Thunk Middleware eine funktionierende asynchrone Aktion erhalten. Ich hole grundsätzlich JSON-Daten von meinem Server und aktualisiere den Zustand entsprechend für Start-, Empfangs- und Fehleraktionen (siehe Code unten). Das Problem, das ich habe ist, wenn ich die store.dispatch(fetchAllBugData())
Methode mit meinem Thunk Aktion Schöpfer ausführen, kann ich mit der Logger Middleware ich habe, dass es funktioniert es geht zuerst die Startaktionen Einstellung fetching: true
dann, sobald es die Daten hat, kann ich fetching: false
sehen und mein Bug-Array ist mit allen meinen Daten gefüllt. Großartig, das funktioniert!Wie Statusdaten nach dem asynchronen Aktionsversand mit Redux abgerufen werden?
jedoch, kann ich nicht scheinen, um herauszufinden, wie mein Geschäfts des in dem Zustand eigentlich danach zugreifen, wenn ich ein console.log(store.getState())
nach Dispatching tun, es gibt mir den Zustand, bevor die Daten abgerufen wurden (aka wenn fetching: true
). Warum ist das? Wie kann ich auf den Status zugreifen, nachdem meine Daten vom Abruf abgerufen wurden, damit ich in meiner Anwendung tatsächlich etwas Nützliches damit tun kann?
Unten ist mein Code mit der Aktion, Reduzierung und speichern. Vielen Dank!
BugDataActions.js
export const fetchAllBugData =() => {
return (dispatch) => {
dispatch({type: FETCH_ALL_BUG_DATA_START})
BugsApi.getBugData(data => {
dispatch({type: RECEIVE_ALL_BUG_DATA, payload: data})
}, err => {
dispatch({type: FETCH_ALL_BUG_DATA_ERROR, payload: err})
})
}
}
BugDataReducer.js
const initialState = {
fetching: false,
fetched: false,
bugs: [],
fetcherr: null,
noresultserr: null
}
const bugDataReducer = (state = initialState, action) => {
switch(action.type) {
case "FETCH_ALL_BUG_DATA_START": {
return {
...state,
fetching: true
}
break;
}
case "RECEIVE_ALL_BUG_DATA": {
return {
...state,
fetching: false,
fetched: true,
bugs: action.payload
}
break;
}
case "FETCH_ALL_BUG_DATA_ERROR": {
return {
...state,
fetching: false,
fetcherr: action.payload
}
break;
}
}
return state;
}
configureStore.js
import { createStore, applyMiddleware } from 'redux'
import thunkMiddleware from 'redux-thunk'
import loggerMiddleware from 'redux-logger'
import rootReducer from './../reducers/index'
export default function configureStore() {
return applyMiddleware(thunkMiddleware, loggerMiddleware()(createStore)(rootReducer)
}
Index.js
import configureStore from './store/configureStore'
import {fetchAllBugData} from './actions/BugDataActions'
import {fetchBugDataByParams} from './actions/BugDataActions'
const store = configureStore()
console.log(store.dispatch(fetchAllBugData()))