You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中向Reducer传递对象时出现undefined问题求助

解决Context API传递电影对象时出现undefined的问题

1. 修复Reducer中的拼写错误

你代码里最直接的问题是AppReducer.jsx里的拼写错误:把payload写成了paylod,导致无法正确获取传递的电影对象,最终添加到watchlist的是undefined。

修正后的AppReducer.jsx:

export default (state, action) => {
  switch (action.type) {
    case "ADD_TO_WATCHLIST":
      return {
        ...state,
        watchlist: [action.payload, ...state.watchlist], // 修正拼写错误:paylod → payload
      };
    default:
      return state;
  }
};

2. 确认传递的电影对象完整性

在MovieCard.jsx的onClick中你传递的是props,需要确保父组件传给MovieCard的props是完整的电影对象。可以在MovieCard组件开头加日志验证:

console.log("MovieCard props:", props);

如果props本身就是undefined或缺少关键字段,需要检查父组件的传值逻辑。

3. 优化useEffect依赖项

当前MovieCard里的useEffect依赖项为空数组,但MOVIE_DETAILS依赖于props.id,这会导致组件更新时不会重新请求数据。修正依赖项:

useEffect(() => {
  fetch(MOVIE_DETAILS)
    .then((res) => res.json())
    .then((data) => {
      setDetails(data);
    });
}, [props.id]); // 添加props.id作为依赖

4. 初始状态类型修正

你初始化details为数组[],但API返回的是对象,建议改成null,避免类型判断问题:

const [details, setDetails] = useState(null);

对应的渲染判断也可以调整为更严谨的可选链写法:

return details?.backdrop_path && props.genre_ids ? (
  // ...组件内容
) : null;

完成以上修正后,应该能正常将电影对象添加到watchlist中。

内容的提问来源于stack exchange,提问作者Hamza Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 01:24:51