Я пытаюсь использовать промежуточное ПО Redux-saga, чтобы избежать ошибки функций asyn c, я использую React Hooks, я подключил Redux-Saga и выполнил функцию * yield, но не знаю, почему это не так чтение моего действия, чтобы перехватить его, и это дает мне ту же ошибку:
Ошибка: действия должны быть простыми объектами. Используйте пользовательское промежуточное программное обеспечение для действий asyn c.
Код: Store. js
import createSagaMiddleware from 'redux-saga';
import rootReducer from './RootReducer'
import {watchFetchImages} from '../middleware/saga';
const sagaMiddleware = createSagaMiddleware();
const store = createStore(
rootReducer,
applyMiddleware(sagaMiddleware)
);
sagaMiddleware.run(watchFetchImages);
export default store;
Actions. js
import axios from 'axios';
import { GetCategories } from './actionTypes'
import {GetImages} from './actionTypes'
export function fetchCategories() {
var url = 'http://localhost:4000/all_categories';
return (dispatch) => {
return axios.get(url).then((res) => {
dispatch({
type: GetCategories,
payload: res.data
})
})
}
}
export function fetchImages(){
var url ='/all_categories';
return(dispatch) => {
return axios.get(url).then((res)=>{
dispatch({
type:GetImages,
payload:res.data
})
})
}
}
Редукторы . js
import { GetCategories , GetImages } from "../redux/actions/actionTypes"
const initialState = {
categories: [],
images:[]
};
const rootReducer = (state = initialState, action) => {
switch (action.type) {
case GetCategories:
return {...state, categories: state.categories.concat(action.payload)}
case GetImages:
return{...state,images:action.payload}
default:
return state;
}
};
export default rootReducer;
Сага. js
import {takeEvery,delay} from 'redux-saga/effects'
function* getImagesAsync(){
yield delay(4000);
console.log('api called')
}
export function* watchFetchImages(){
yield takeEvery("GetImages",getImagesAsync);
}
Дом. js Где я называю действие приведения
const HomePage = props => {
useEffect(()=>props.getImages())
console.log(props)
const mapStateToProps = (images) => ({
images
})
const mapDispatchToProps= dispatch =>({
getImages: () => dispatch(fetchImages())
})
export default connect(mapStateToProps,mapDispatchToProps)(HomePage);
Индекс. js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { Provider } from "react-redux";
import store from '../src/redux/store';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(<Provider store={store}><App /></Provider>, document.getElementById('root'));
Кто-нибудь может мне помочь с этим ??