CSS grid、Day.js、React:在基于网格的日历中,如何将具有特定日期的网格项目推送到具有相应日期的网格图块中?

2024-02-10

我正在使用 React 创建一个基于网络的现场音乐指南。它将显示本周的所有演出。为了实现这一目标,我制作了一个 CSS 网格,并使用 Day.js 分配当前工作日和日期。我最终想展示演出,以便它们与演出当天相匹配,大致如下:

Monday          | Tuesday         |Wednesday       |        
October 5th 2020| October 6th 2020|October 7th 2020|

Monday gig 1     |Tuesday gig 1    |Wednesday gig 1|
Monday gig 2     |Tuesday gig 2    |Wednesday gig 2|
Monday gig 3     |Tuesday gig 3    |Wednesday gig 3|

我正在努力弄清楚如何做到这一点 - 我需要以某种方式查找演出日期和网格日期之间是否存在匹配,并将匹配的演出推入正确的网格方块中。关于我如何实现这一目标有什么建议吗?

这是我到目前为止所做的事情。我使用 CSS-grid 和 day.js 创建了一个网格。这将创建 7 个网格方块,每个网格方块都有一个工作日和相应的日期 - 代码如下:

Grid component

import React, {useEffect,useState} from 'react'
import Giglisting from './Giglisting'
import axios from 'axios'
import dayjs from "dayjs";
import en from "dayjs/locale/en";

const Grid = () => {

  const [gigs, setGigs] = useState([])
  const [isLoading, setLoading] = useState(false)


  useEffect(()=>{
    setLoading(true)
    axios.get('https://us-central1-gig-fort.cloudfunctions.net/api/getGigListings')
    .then(res=> {
      setGigs(res.data)
      setLoading(false)
    })
  },[])

  dayjs.locale({
    ...en,
    weekStart: 1 
  });

  const startOfWeek = dayjs().startOf("week");

  const weekdays = new Array(7)
  .fill(startOfWeek)
  .map((day, idx) => day.add(idx, "day")
  .format("dddd, MMMM D "));

  const grid =  <div className="grid-container">
  {weekdays.map((day) => (
    <div key={day} className="grid-item">
      <h3>{day}</h3>
    </div>
  ))}
</div>


const loadingMessage = <h1 className = 'h1-loading'>gigs loading...</h1>
const display = isLoading === false ? grid : loadingMessage

  return (
    <>
    {display}
    </>
  );
};

export default Grid

Grid CSS

.grid-container {
    display: grid;
    justify-items: center;
    margin-top:5%;
    grid-template-rows: repeat(3, 200px);
    grid-row-gap: 1px;
    grid-template-columns: repeat(3, 1fr);
    grid-column-gap: 1px;
  
  }
  
  .grid-item {
    color:#a5262b;
    font-family: 'Canela-Medium', sans-serif;
    width:auto;
    width:80%;
  }

在网格组件中,我正在进行数据库 API 调用,该调用将以以下形式返回演出数据:

[
    {
    date:"2020-10-05",
    genre:"Jazz",
    name:"Jazz quartet",
    price:"$10",
    tickets:"ticket URL",
    time:"21:30",
    venueName:"The Third Eye"
    },
    {
    date:"2020-10-06",
    genre:"Funk",
    name:"The Fades at Rogue",
    price:"$10",
    tickets:"ticket URL",
    time:"21:30",
    venueName:"Rogue and Vagabond"
    },
    {
    date:"2020-10-07",
    genre:"Latin",
    name:"Son Clave",
    price:"$10",
    tickets:"ticket URL",
    time:"21:30",
    venueName:"Havana"
    }
]

所以这是主要问题:我需要映射这个演出数据,然后将每个演出映射到网格中的正确日期


我获取了所有代码并使其工作这个沙箱 https://codesandbox.io/s/silly-shannon-musv0?file=/src/Grid.jsx,

Note,

  • api有时会返回date as ""并且创建日期存在(通常不存在),这是你的决定
  • 假设api日期格式为YYYY-MM-DD

由于第一个原因,有些日子不见了gigs

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS grid、Day.js、React:在基于网格的日历中,如何将具有特定日期的网格项目推送到具有相应日期的网格图块中? 的相关文章

随机推荐