我需要你的帮助。我正在尝试通过redux获取API数据。我已经拥有了所需的一切:action_types、action_creators、reducer。但是当我尝试提取数据时,出现错误:Cannot read properties of undefined (reading 'map')
。请问我的错误在哪里?非常感谢你的帮助。下面是我的代码:
cartoons.js
import React, {useEffect} from "react";
import {useDispatch, useSelector} from "react-redux";
import {cartoons_are_loaded} from "../redux/action_creators";
export let Cartoons = () => {
let dispatch = useDispatch();
let cartoons = useSelector(({cartoon_reducer: {cartoons}}) => cartoons);
let fetchCartoons = async () => {
try {
let response = await fetch('https://api.sampleapis.com/cartoons/cartoons2D');
let json = await response.json();
console.log(json);
dispatch(cartoons_are_loaded(json.data))
} catch (e) {
console.log(e)
}
}
useEffect(() => {
if (!cartoons.length){
fetchCartoons();
}
},[])
return (<div>
{cartoons.map(el => <div key={el.id}>{el.title}</div>)}
</div>)
}
reducers.js
import {CARTOONS_ARE_LOADED} from "./action_types";
let initialState = {
cartoons: []
}
let cartoon_reducer = (state = initialState, action) => {
switch (action.type) {
case CARTOONS_ARE_LOADED: {
return {
...state,
cartoons: action.payload
}
}
default:
return state;
}
}
export default cartoon_reducer;
action_types.js
let CARTOONS_ARE_LOADED = 'CARTOONS_ARE_LOADED';
let DELETE_FAVOURITE_MOVIE = 'DELETE_FAVOURITE_MOVIE';
let ADD_FAVOURITE_CARTOON = 'ADD_FAVOURITE_MOVIE';
export {
CARTOONS_ARE_LOADED,
ADD_FAVOURITE_CARTOON,
DELETE_FAVOURITE_MOVIE
}
action_creators.js
import {
CARTOONS_ARE_LOADED,
} from "./action_types";
let cartoons_are_loaded = (payload) => ({type : CARTOONS_ARE_LOADED, payload});
export {
cartoons_are_loaded
}
all_reducers.js
import cartoon_reducer from "./reducers";
import {combineReducers} from "redux";
export let root_reducer = combineReducers({
cartoon_reducer
})
CARTOONS_ARE_LOADED
这种情况,action.payload
的值是什么?看起来你没有维护数组的状态不变性。 - Drew Reese