react-native - React Native - 如何延迟启动
问题描述
大家好,我正在尝试制作一个具有很多自定义功能的倒数计时器,但我的第一个问题是如何延迟它的开始。
它从 0 秒开始,需要一点时间来获取我从上一页传递的值
const CountDownScreen = ({route, navigation}) => {
const meditationTime = route.params.time;
我抓紧时间
const getMedTime = () => {
let res = meditationTime;
return new Promise(resolve => resolve(res));
};
说明我会得到的时间
const [timeToGive, setTimeToGive] = useState();
useEffect(() => {
const setTimeState = async () => {
const getTime = await getMedTime();
console.log('get time', getTime);
// setGotTime(getTime);
let timeToGive = {
minutes: 0,
seconds: getTime,
};
setTimeToGive(timeToGive);
};
setTimeState();
updateTimer();
}, []);
与时俱进
const [time, setTime] = useState(
{
eventDate: moment.duration().add(timeToGive),
},
);
计时器开始(我想在承诺之后)
const updateTimer = () => {
const x = setInterval(() => {
let { eventDate } = time;
if (eventDate <= 0) {
clearInterval(x);
sessionEnded();
} else {
eventDate = eventDate.subtract(1, 's');
const mins = eventDate.minutes();
const secs = eventDate.seconds();
setTime({
mins,
secs,
eventDate,
});
}
}, 1000);
setIntervalTime(x);
};
我尝试了很多不同的解决方案,但都没有奏效。它总是开始晚我想避免asetTimeout
有没有更好的功能?谢谢 !
解决方案
那是因为您使用的是 setInterval,它仅在 1 秒后开始(在您的情况下)。
您可能应该重新调整您的代码并执行类似的操作:
x(); // Call x once
setInterval(() => {
x();
}, 1000); // Call x after every seconds
您可以将 intervalId 存储到一个状态中,这样您就可以清除它。
推荐阅读
- c# - 使用 ASP.NET 的 JSON 输出不正确
- laravel - Laravel Dompdf 是否支持子集 otc 字体?
- jquery - 使用 fadeOut() 后,消息将不再显示
- python-3.x - 在 AWS Lambda 中上传时 botocore 中的 python3 zipfile
- spring - Blueprint/Spring 无法找到已将项目从 Talend 6.5.1 移至 7.1.1 的“classpath:path/to/file.ext”资源
- python - matplotlib.close() 不关闭绘图
- css - 如何通过scss定位工具提示
- python - PyInstaller 中的 Pandas、Numpy
- python - numpy np.zeros((1,2)) 与 np.zeros((2,)) 的差异
- python - 将负科学记数法 1.3E-2 转换为浮点数?