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

如何在React+Redux项目中实现跨组件添加并渲染收藏电影功能

Redux收藏功能实现方案

1. 修复Action_adventure.js的按钮触发逻辑

现有代码的问题是点击按钮时没有把add_favourite_movie生成的action传给dispatch,而且仅传电影id会导致收藏列表无法展示完整电影信息,修改如下:

// 原来的按钮代码
<button onClick={() => add_favourite_movie(el.id)}>Add to favourite</button>
// 修改为
<button onClick={() => dispatch(add_favourite_movie(el))}>Add to favourite</button>

2. 完成Favourites.js的收藏列表渲染

修正语法错误,添加列表渲染逻辑:

import React from "react";
import {useSelector} from "react-redux";

export let Favourites = () => {
  // 从redux中取收藏的电影列表
  let favourites_movies = useSelector(({movies_reducer : {favourites_movies}}) => favourites_movies)

  return (
    <div>
      <h2>我的收藏</h2>
      {favourites_movies.length === 0 ? (
        <p>暂无收藏电影</p>
      ) : (
        favourites_movies.map(el => (
          <div key={el.id}>
            <h3>{el.title}</h3>
            <img src={el.posterURL} alt={el.title} className="favourite_movie"/>
          </div>
        ))
      )}
    </div>
  )
}

3. 可选优化:避免重复添加同个电影到收藏

修改reducers.js中ADD_FILMS_TO_FAVOURITE的逻辑,添加前先判断是否已存在:

case ADD_FILMS_TO_FAVOURITE: {
  const isExist = state.favourites_movies.some(movie => movie.id === action.payload.id)
  if (isExist) return state
  return {
    ...state,
    favourites_movies: [...state.favourites_movies, action.payload]
  }
}

内容的提问来源于stack exchange,提问作者Dmitry Chernyak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:57:04