当前位置: 首页 > 知识库问答 >
问题:

将获取的对象数组传递到状态,但不使用钩子在组件中进行渲染

上官锦
2023-03-14

我有一个主要的应用程序渲染游戏卡组件。我存储了一个对象数组,该数组取自一个use效应状态,并使用useState和setInterval每分钟重新刻蚀一次。我可以注销我的游戏卡组件中传递的道具,但它不会渲染映射数据。它将正确显示加载并删除它一旦加载,它还将在div中显示“游戏”。它显示了我在状态中通过反应设备工具传递的道具。我也没有错误。我觉得我差点就有了,或者我写得完全错了。

我已经检查了文档,但这可能是一个特殊情况,因为我想在GameCard中分解阵列。我将嵌套对象的整个数组添加到状态,并在GameCard返回时对其进行分解。

注意:此api需要两个单独的抓取,一个用于获取链接数组(未显示),另一个用于循环每个链接以获取每个游戏的数据

一个pp.js

import React, { useState, useEffect } from "react";
import "./App.css";
import getGameLinks from "./utils/getGameLinks";
import GameCard from "./GameCard";

function App() {
  const [games, setGames] = useState([]);
  const [link, setLink] = useState([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    const getGameData = async () => {
      setLoading(true);
      if (link.length === 0) {
        const links = await getGameLinks(); // gets list of game links, required to get each game's data
        setLink(links);
      } else {
        const gameArray = [];
        link.forEach((link) => {
          fetch(link)
            .then((res) => res.json())
            .then((out) => gameArray.push(out));
        });
        const newGameArray = gameArray.sort((a, b) => a.gamePk > b.gamePk); // does not work
        setGames(newGameArray);
        setLoading(false);
      }
      const timer = setInterval(getGameData, 60000);
      return () => {
        clearInterval(timer);
      };
    };
    getGameData();
  }, [link]);

  return (
    <div className="App">
      <h1>Gameday</h1>
      <GameCard games={games} loading={loading} />
    </div>
  );
}

export default App;

游戏卡。js

import React from "react";

const GameCard = ({ games, loading }) => {
  if (loading) return <p>Loading...</p>;
  if (!loading)
    return (
      <div>
        <p>Games</p>
        {games.map((games) => (
          <p key={games.gamePk}>
            {games.gameData.teams.home.name} vs {games.gameData.teams.away.name}
          </p>
        ))}
      </div>
    );
};

export default GameCard;

共有1个答案

韦宣
2023-03-14

关于你的评论,我还没有测试这个,但是我相信如果你替换link.for每个(link=

const gameArray = [];

for (const l of link) {
  const response = await fetch(l);
  const out = await response.json();
  gameArray.push(out);
};

不需要删除或更改任何其他内容。当然,您可能还需要在那里进行一些错误处理。

 类似资料:
  • 问题内容: 我有一个用express编写的node.js服务器,并在某个时刻将一个数组发送到某个.jade页面。问题在于,渲染Jade页面时,Jade编译器将数组呈现为,而Chrome上的JavaScript编译器则抱怨说“意外标识符”。 这是Jade代码: 如您所见,这确实很简单,我只是将由node.js传递给Jade 的变量内所给的信息填充到div中。第二行的警报不会触发,因为一旦我尝试分配变

  • 在这个例子中,我想在我的父组件中使用我的子组件的状态。

  • 我试图在我的应用程序中分解组件,但在理解如何将状态和道具从父组件传递给子组件时遇到了一些问题。对于上下文,“我的子组件”是一个表,它在行中呈现较小的组件。 现在我有一个名为BookComponents的常量,它需要一本书并写入状态。我被卡住的地方是传递状态和道具到我的书桌组件,这样我就可以在书桌上呈现书籍,而不是在主页上。 主页: 书桌代码:

  • 我无法理解为什么我的AppReact组件呈现两次,如下面的gif所示。 我插入了一个控制台。在返回组件之前记录日志,查看组件渲染的次数。 每当我移除useState钩子时,我的应用程序只会呈现一次我认为应该呈现的效果。任何关于为什么会发生这种情况的指导都是受欢迎的

  • 问题内容: 随着React 中钩子的引入,现在的主要困惑是何时将函数组件与钩子和类组件一起使用,因为在钩子的帮助下,甚至可以在函数组件中获得和部分使用。所以,我有以下问题 钩子的真正优点是什么? 何时使用带有钩子的函数组件和类组件? 例如,带有钩子的功能组件不能像类组件那样帮助性能。他们没有执行就不能跳过重新渲染。还有其他原因吗? 提前致谢。 问题答案: 引入和其他特性(例如和)的思想是帮助减少必

  • 问题内容: 我知道我可以在渲染组件时通过。我也知道这种方法。但是问题是,由于我的组件不知道它的初始状态,并没有太大帮助。我做。所以我想在渲染时通过它。 这样的东西(伪代码): 我知道我可以使用a 作为初始状态,但这闻起来像是反模式。 我该怎么办? 编辑清晰度 想象一下我有一个组件。到我第一次渲染它时,初始状态对应于数据库中当前注释的快照。当用户包含评论时,此列表将更改,这就是为什么它应该是a 而不