reactjs 在React中获得过多的重新渲染

8yparm6h  于 2023-11-18  发布在  React
关注(0)|答案(2)|浏览(95)

我有一个名为**Search的React组件,我在其中迭代数据项并为每个项渲染一个SearchCard组件。SearchCard组件包含处理播放和暂停动作的逻辑。我注意到SearchCard**组件中的控制台日志被多次触发,并且还有多个fetch请求被发出。

// SearchCard.jsx
import { useDispatch } from "react-redux";
import { Link } from "react-router-dom";
import PlayPause from "./PlayPause";
import { playPause, setActiveSong } from "../redux/features/playerSlice";
import { useEffect, useState } from "react";

const SearchCard = ({ song, i, isPlaying, activeSong, data }) => {
  const dispatch = useDispatch();

  console.log('heyyy!'); // This log statement is appearing multiple times

  const handlePauseClick = () => {
    dispatch(playPause(false));
  };

  const handlePlayClick = () => {
    dispatch(setActiveSong({ data, song, i }));
    dispatch(playPause(true));
  };

  // ... rest of the component

  return (
    // ... component JSX
  );
};

export default SearchCard;

个字符

**预期行为:我期望SearchCard**组件在每个渲染示例中只记录一次日志和获取一次数据,但它似乎多次记录和获取数据,导致意外行为。

llew8vvj

llew8vvj1#

1.检查使用效果属性:在SearchCard.jsx组件中,查看useEffect钩子(当前未显示在您提供的代码中),并确保您已列出useEffect依赖的所有依赖项。如果缺少任何依赖项,则可能导致意外行为。
2.优化渲染并避免副作用:您可以使用React.memo来记住您的SearchCard组件,并防止它在 prop 未更改的情况下重新渲染。但是,请记住,记住是一种权衡,它可能不适合所有场景。
1.在父组件中获取数据:考虑将数据获取逻辑移动到父组件(本例中为Search.jsx),并将必要的数据作为props传递给SearchCard组件。这有助于集中数据获取并避免不必要的获取调用。
1.:如果问题仍然存在,您可能需要使用浏览器开发人员工具来检查React组件树,并检查哪些组件正在渲染并导致额外的渲染。这可以帮助您确定意外行为的根本原因。

hgb9j2n6

hgb9j2n62#

  • 您正在使用SearchCardinsidesongs.map,因为对于每个迭代,都有一个控制台将记录假设您在songs数组中有五个元素,则五个控制台将记录以避免此 * -将您的网络调用移动到父级别

相关问题