CSS 网格,Day.js,React:在我基于网格的日历中,如何将具有特定日期的网格项目推送到具有相应日期的网格块中?
CSS grid, Day.js, React: In my grid-based calendar, how do I push grid items with specific dates into grid tiles with the corresponding date?
我正在使用 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 调用,它将 return 以下列形式提供的演出数据:
[
{
date:"2020-10-05",
genre:"Jazz",
name:"Jazz quartet",
price:"",
tickets:"ticket URL",
time:"21:30",
venueName:"The Third Eye"
},
{
date:"2020-10-06",
genre:"Funk",
name:"The Fades at Rogue",
price:"",
tickets:"ticket URL",
time:"21:30",
venueName:"Rogue and Vagabond"
},
{
date:"2020-10-07",
genre:"Latin",
name:"Son Clave",
price:"",
tickets:"ticket URL",
time:"21:30",
venueName:"Havana"
}
]
所以这是主要问题:我需要映射这个演出数据,然后将每个演出映射到网格中的正确日期
我获取了所有代码并使其在 this sandbox、
中运行
注意,
- api 有时 return
date
因为 ""
和创建日期存在(通常不存在),它是你的调用
- 假设 api 日期格式为
YYYY-MM-DD
由于第一个原因,少了几天 gigs
我正在使用 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 调用,它将 return 以下列形式提供的演出数据:
[
{
date:"2020-10-05",
genre:"Jazz",
name:"Jazz quartet",
price:"",
tickets:"ticket URL",
time:"21:30",
venueName:"The Third Eye"
},
{
date:"2020-10-06",
genre:"Funk",
name:"The Fades at Rogue",
price:"",
tickets:"ticket URL",
time:"21:30",
venueName:"Rogue and Vagabond"
},
{
date:"2020-10-07",
genre:"Latin",
name:"Son Clave",
price:"",
tickets:"ticket URL",
time:"21:30",
venueName:"Havana"
}
]
所以这是主要问题:我需要映射这个演出数据,然后将每个演出映射到网格中的正确日期
我获取了所有代码并使其在 this sandbox、
中运行注意,
- api 有时 return
date
因为""
和创建日期存在(通常不存在),它是你的调用 - 假设 api 日期格式为
YYYY-MM-DD
由于第一个原因,少了几天 gigs