私は React アプリを持っています。Redux を使用してオンライン サービス (非同期) に対して (学習するために) ajax 呼び出しを行う必要があります。
これは私の店です:
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import duedates from './reducers/duedates'
export default applyMiddleware(thunk)(createStore)(duedates);
これはアクションです:
import 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))
)
}
そして、これはリデューサーです:
export default (state = {}, action) => {
switch(action.type) {
case 'getDueDate':
console.log("IN REDUCER")
return state.dueDates = action.dueDates;
default:
return state
}
}
私は自分が間違っていることを理解していません。アクションはコンポーネントから完全に呼び出されています。しかし、その後、次のエラーが発生します。
エラー: アクションはプレーン オブジェクトでなければなりません。非同期アクションにはカスタム ミドルウェアを使用します。
私は間違った反応サンクミドルウェアを使用していると思います。私は何を間違っていますか?
編集
アクションはレデューサーを呼び出していますが、レデューサーは状態を変更した後、render メソッドを再実行していません。
case 'getDueDate':
console.log("IN REDUCER")
return state.dueDates = action.dueDates;