Bir React Uygulamanız var, Redux ile bir çevrimiçi hizmete (async) ajax çağrısı yapmam (öğrenebilmek için) yapmam gerekiyor. Redux'daki Async eylemleri
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import duedates from './reducers/duedates'
export default applyMiddleware(thunk)(createStore)(duedates);
Bu
eylemleri olduğunu:Bu
benim dükkanımimport rest from '../Utils/rest';
export function getDueDatesOptimistic(dueDates){
console.log("FINISH FETCH");
console.log(dueDates);
return {
type: 'getDueDate',
dueDates
}
}
export function waiting() {
console.log("IN WAIT");
return {
type: 'waiting'
}
}
function fetchDueDates() {
console.log("IN FETCH");
return rest({method: 'GET', path: '/api/dueDates'});
}
export function getDueDates(dispatch) {
console.log("IN ACTION");
return fetchDueDates().done(
dueDates => dispatch(getDueDatesOptimistic(dueDates.entity._embedded.dueDates))
)
}
Ve bu düşürücüdür: Ben yanlış ne yapıyorum alamadım
export default (state = {}, action) => {
switch(action.type) {
case 'getDueDate':
console.log("IN REDUCER")
return state.dueDates = action.dueDates;
default:
return state
}
}
. Eylem, bileşenden mükemmel şekilde çağrılıyor. Ama sonra bu hatayı alıyorum:
Error: Actions must be plain objects. Use custom middleware for async actions.
ben yanlış tepki-thunk ortakatmanını kullanıyorum sanırım. Neyi yanlış yapıyorum? DÜZENLEME
Şimdi eylem redüktör sesleniyor, fakat redüktör, devlet değiştirdikten sonra yeniden çalışmadığı Sana compose
kullanarak gerektiğini düşünüyorum yöntem
case 'getDueDate':
console.log("IN REDUCER")
return state.dueDates = action.dueDates;
Büyük çalışır, şimdi çalışıyor gibi görünüyor. ama redüktörde, 'geri döndüğümde' devleti döndürürüm.dueDates = action.dueDates; ', tekrar çağrılmıyor .. Başka bir şey eklemeliyim mi? – Pablo
Şu anda, kod örneğinizde, her iki eylem de durumu değiştirmiyor. Devleti geri veriyorsun. Sorularınızı güncelleyebilir miyim, böylece mevcut durumu görebilir miyim? –
güncellendi, şimdi dönüyorum state.dueDates = action.dueDates; ' – Pablo