处理数组中的数据时出现问题,反应

Problem with manipulating data in array, react

我使用 number useParams 从 URL 路径获取数字,使用 deck 数组从 data 数组获取数据,该数组包含 32 个具有 id 和 src 的对象(URL 图像)属性。

// Images.js

const data = [
    {
        id:1,
        src:'https://###.com/###',
    },
    //...

const Images = () => {
    const {number} = useParams()
    const [deck, setDeck] = useState(data);
    //...

然后我使用 useEffect 从 URL 路径中获取数字,并使用 setCards() 函数通过删除 URL 中的给定数字显示适当数量的卡片从 numberdeck.length 的索引。 shuffle() 函数在这里无关紧要,它只是以随机顺序放置对象。

// Images.js

useEffect(() => {
  fetch(`http://localhost:3000/play/${number}`).then(setCards(number));
}, [number]);

const setCards = (number) => {
  let tempDeck = deck;
  tempDeck.splice(number, deck.length);
  shuffle(tempDeck);
  setDeck(tempDeck);
};

我还使用这段代码通过路由到正确的 URL 路径从网页呈现适当数量的卡片:

// Home.js

<div className="btn-group">
  <Link to="/play/8">
    <button className="btn">8 cards</button>
  </Link>
  <Link to="/play/16">
    <button className="btn">16 cards</button>
  </Link>
  <Link to="/play/24">
    <button className="btn">24 cards</button>
  </Link>
  <Link to="/play/32">
    <button className="btn">32 cards</button>
  </Link>
</div>;

每当我进行初始渲染时,例如 select“24 张卡片”按钮,一切都很好,32 张卡片中的 24 张应该显示,但当我返回“主页”时select 在这种情况下,卡片的价值更高,“32 张卡片”按钮将显示 32 张,浏览器将仅显示 24 张卡片,而不是 32 张。我该如何解决?

使用此代码:

let tempDeck = deck;
tempDeck.splice(number, deck.length);

您正在编辑原始数组。

您应该考虑创建原始数组的浅表副本并对其进行编辑:

let tempDeck = [...deck];
tempDeck.splice(number, deck.length);