在 React 18.2.0 中,我试图在 HTTP 请求中发送今天凌晨 00 点(如果需要 GMT +03.00 时区)的时间戳数据。为此,我将时间戳数据保存在名为
unixDate
的状态中。然后,我将当前时间戳更改为 00.00 AM 并使用 getTasks()
函数发送时间戳数据函数。我还有两个使用 getTasks()
的 useEffect 函数。其中一个只是使用 getTasks() 函数,而另一个是通过保留的数字将时间戳更改为另一天(dateCounter
状态保持整数)并调用 getTasks():
const [unixDate, setUnixDate] = useState(String(Math.floor(Date.now())));
useEffect(() => {
const today = new Date();
today.setHours(0, 0, 0, 0);
setUnixDate(String(Math.floor(today)));
getTasks();
}, []);
useEffect(() => {
getTasks();
}, [handleAddTask])
useEffect(() => {
const today = new Date();
let tomorrow = new Date();
tomorrow.setDate(today.getDate() + dateCounter)
tomorrow.setHours(0, 0, 0, 0);
setUnixDate(String(Math.floor(tomorrow / 1000)));
getTasks();
}, [dateCounter])
async function getTasks() {
const data = await PostService.getStudentTasks(unixDate);
setTask(data);
}
当我运行这段代码时,React 给我“React Hook useEffect 缺少依赖项:‘getTasks’。要么包含它,要么删除依赖项数组”,警告所有 useEffects,不会改变 00.00 的
unixDate
状态AM 并在页面加载时运行所有 useEffect 代码部分(handleAddTask
和 dateCounter
useEffects 不应运行)。
当我改变
dateCounter
状态时,unixDate
状态在00.00 AM改变之前的日期。
我正在尝试解决这个问题,改变了 getTasks() 函数:
async function getTasks(unixDate) {
const data = await PostService.getStudentTasks(unixDate);
setTask(data);
}
警告消失了,但这次 getTasks() 函数使用本地 unixDate 变量并发送
undefined
unixDate.
我该如何解决这些问题?