【发布时间】:2021-02-20 05:15:17
【问题描述】:
我正在错误跟踪器项目中构建一个网页,用户可以在登录后在图表中查看某些类型的票证。我通过在函数 getTickets() 中进行 api 调用来检索这些票证,并设置它们作为状态。我有一个 useEffect,它包含一个映射票证的函数,并将每种类型的票证数量保存在 useRef vars 中。然后这些变量被设置在 data() 中,它为图表设置数据。
我将如何更新这些 useRefs?当我记录这些 useRefs 时,它们都是空的。另外,由于 setChartData() 是异步的,我是否必须创建另一个 useEffect 具有仅在这些 useRef 更新时调用 data() 的依赖项?
getTickets()
const getTickets = () => {
fetch("/api/Ticket")
.then((response) => response.json())
.then((data) => {
console.log(data)
setTickets(data)
})
.catch((error) => {
console.log(error)
});
}
mapTickets()
const mapTickets = () => {
tickets.map((ticket) => (
ticket.status == "None" ?
noneTickets.current.tickets += 1
: (
noneTickets.current.tickets = 0
),
ticket.status == "Low" ?
lowTickets.current.tickets += 1
: (
lowTickets.current.tickets = 0
),
ticket.status == "Medium" ?
mediumTickets.current.tickets += 1
: (
mediumTickets.current.tickets = 0
),
ticket.status == "High" ?
highTickets.current.tickets += 1
: (
highTickets.current.tickets = 0
)
))
}
数据()
const data = () => {
setChartData({
labels: ['None', 'Low', 'Medium', 'High'],
datasets: [
{
label: 'ticket priority',
data: [noneTickets.current.tickets, lowTickets.current.tickets, mediumTickets.current.tickets, highTickets.current.tick],
backgroundColor: [
'rgba(75, 192, 192, 0.6)'
],
borderWidth: 4
}
]
})
}
useEffect(仅在工单更新时更新 useRefs 和设置图表数据)
useEffect(() => {
mapTickets();
data();
}, [tickets])
useEffect(设置工单状态)
useEffect(() => {
getTickets();
const requestOptions = {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
ApplicationUserusername: location.state.username,
}),
};
fetch("/api/IssueTracker/dashboard", requestOptions)
.then((response) => response.json())
.then((data) => {
setProjects(data);
})
.catch((error) => {
console.log(error)
});
}, [])
【问题讨论】:
-
useRef没有问题,你的地图功能不好。
-
@MUHAMMADILYAS 你能澄清一下吗?
-
如果有 4 个元素具有不同的
ticket.status,那么其中只有 1 个(最后一个)+1,其他三个将为零。
标签: javascript reactjs