Witam, mam problem z aplikacją, którą tworzę. Mam stworzoną akcję, która dispachuje dane zwrócone przez requesta GET i dane są umieszczane w storze.
export function fetchAllRoadDetails() {
return function(dispatch) {
return axios.get("/api/connection/allTrips")
.then(payload => {
dispatch(setAllRoad(payload));
})
.catch(err => {
console.log(err)
});
};
}
function setAllRoad(data) {
return {
type: SET_ALL_ROAD,
payload: data,
};
}
const initialState = {
allRoad:[],
}
const rootReducer = (state = initialState, action) => {
switch (action.type) {
case SET_ALL_ROAD:
return {
...state,
allRoad: action.payload };
default:
return state;
}
};
}
Następnie mam komponent funkcyjny, w którym pod button'em w OnClick wywołuje funkcję:
const setTrip = () => {
axios.post('/api/connection/add',
{
"roadDate": state.date_c,
"vehicle": state.vehicle_c,
"driver": state.driver_c,
})
.then(()=>console.log("success"))
.catch((err)=>console.log(err));
props.fetchAllRoadDetails();
}
const mapDispatchToProps=dispatch=>({
fetchAllRoadDetails:()=>dispatch(fetchAllRoadDetails())
});
Mój problem polega na tym, że po wywołaniu posta w setTrip() oraz geta w fetchAllRoadDetails(), state działa z opóźnieniem, dopiero nastepne wywołanie pokazuje wynik wcześniejszego wywowłania.
Załóżmy tablica allRoad:[], jest pusta, wywołuje setTrip() oraz fetchAllRoadDetails() i redux devtools pokazują mi, że tablica nadal jest pusta a SET_ALL_ROAD zostało odczytane.
Dopiero następne wywołanie, czyli drugie, pokazuje mi, że w tablicy jest jeden element.
Czemu tak się dzieje ?
Z góry dziękuje za pomoc.
- screenshot-20200601145006.png (23 KB) - ściągnięć: 37