当其中一个项目的有效期和时间在React JS中到期时,如何刷新表数据

发布于 2025-01-18 20:01:54 字数 1519 浏览 0 评论 0原文

我有一个表数据,其中有名为 ItemTimeValidTill 的部分 例如,其中一个项目时间2022 年 4 月 2 日下午 3:08:01,并且ValidTill strong> 时间 2022 年 4 月 2 日下午 3:09:26 所以在这个 validtill 过期后,我在 useEffect 中进行了 api 调用,我已经这样做了一次组件已安装,但我也希望它在 validTill 过期时运行,那么如何实现

const [quotesData, setQuotesData] = useState([]);
useEffect(() => {
  getRandomdata();
}, []);
async function getRandomdata() {
  const result = await RandomApi.get(`/quotes/${symbolId}`);
  setQuotesData(result.data.payload);
}
    <Table stickyHeader className={classes.stickyHeader}>
      <TableHead>
        <TableRow>
          <TableCell>Item</TableCell>
          <TableCell>Time</TableCell>
          <TableCell>Validtill</TableCell>
        </TableRow>
      </TableHead>
      <TableBody>
        {quotesData.map(({Item, time, valid_till }) => (
          <TableRow key={Item}>
            <TableCell>{Item}</TableCell>
            <TableCell>
              {moment(time).format("MMMM Do YYYY, h:mm:ss a")}
            </TableCell>
            <TableCell>
              {moment(valid_till).format("MMMM Do YYYY, h:mm:ss a")}
            </TableCell>
          </TableRow>
        ))}
      </TableBody>
    </Table>

I have a table data where there are section called Item, Time and ValidTill
so for example one of the Item has a time of April 2nd 2022, 3:08:01 pm and is ValidTill time of April 2nd 2022, 3:09:26 pm so after this validtill expires i have make an api call in useEffect which i am already doing it once the component mounts but i also want it to run when validTill expires so how can it be achieved

const [quotesData, setQuotesData] = useState([]);
useEffect(() => {
  getRandomdata();
}, []);
async function getRandomdata() {
  const result = await RandomApi.get(`/quotes/${symbolId}`);
  setQuotesData(result.data.payload);
}
    <Table stickyHeader className={classes.stickyHeader}>
      <TableHead>
        <TableRow>
          <TableCell>Item</TableCell>
          <TableCell>Time</TableCell>
          <TableCell>Validtill</TableCell>
        </TableRow>
      </TableHead>
      <TableBody>
        {quotesData.map(({Item, time, valid_till }) => (
          <TableRow key={Item}>
            <TableCell>{Item}</TableCell>
            <TableCell>
              {moment(time).format("MMMM Do YYYY, h:mm:ss a")}
            </TableCell>
            <TableCell>
              {moment(valid_till).format("MMMM Do YYYY, h:mm:ss a")}
            </TableCell>
          </TableRow>
        ))}
      </TableBody>
    </Table>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

抹茶夏天i‖ 2025-01-25 20:01:54

我使用了另一种方法,而不是为每个项目运行间隔轮询,这将是贪婪的,我认为您可以从安装到有效期的那一刻起就可以计算出剩下的时间,而只是放置一个超时的时间两个日期,我在这里举了一个例子,看看它是否可以帮助您:
https://stackblitz.com/edit/reaectt/reaect-t5jfab

我在数组,但它可以与任何数量的项目一起使用,因为它只是在它们中循环并放置超时。

I used another approach, instead of running an interval polling for each item, which would be greedy, I think you could just calculate the time left from the moment the component is mounted to the expiry time and just place a timeout with the difference between those two dates, I made an example here, see if it can help you:
https://stackblitz.com/edit/react-t5jfab

I placed just one item in the array, but it works with any amount of items, since it just cycles through them and places timeouts.

第几種人 2025-01-25 20:01:54

因为您的表中可能有很多行,并且您希望监听每一行的到期事件,以便您可以为每个特定行发送 API 请求,对吗?

要实现它,您可以使用 setInterval javascript 函数设置每秒的间隔,并在 setInterval 回调的正文中,您可以像这样检查每行的到期时间。

    useEffect(() => {
      setInterval(() => {
    // loop on each row an compare time to current time for expiration check if expired send the api request
        

    quotesData.map(({ Item, time, valid_till }) => {
      if (valid_till > currentTime) {
        // expired
        //send api request
      }
    });
  }, 1000);
});

如果您的数据集不太大,这可能是一个很好的解决方案。对于更大的数据集,我们必须对代码进行更多调整。

As there could be many rows in your table and you would like to listen to each row's expiry event so that you can send an API request for each specific row right??.

To achieve it you can use setInterval javascript function to set interval for each second and in the body of setInterval callback you can check for each rows expiry like this.

    useEffect(() => {
      setInterval(() => {
    // loop on each row an compare time to current time for expiration check if expired send the api request
        

    quotesData.map(({ Item, time, valid_till }) => {
      if (valid_till > currentTime) {
        // expired
        //send api request
      }
    });
  }, 1000);
});

this could be a good solution if your dataset is not too large. For larger datasets we have to do some more tweaks on the code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文