React'te Anlık Saat
React uygulamalarında anlık saati nasıl gösterebiliriz?
Published by Adem Hatay on
Tik Tak: Anlık Saati React’te En İyi Nasıl Gösteririz?
Bir web uygulamasında anlık saati göstermek, kullanıcı deneyimi açısından önemli bir detaydır. React gibi modern bir kütüphane kullanırken, bunu en verimli ve pürüzsüz şekilde nasıl yapabiliriz? Bu yazıda, requestAnimationFrame
kullanarak React’te gerçek zamanlı bir saat nasıl oluşturacağımızı adım adım inceleyeceğiz.
Neden setInterval
veya setTimeout
Kullanmamalıyız?
Genellikle, belirli aralıklarla bir işlevi çağırmak için setInterval
veya setTimeout
kullanırız. Ancak, bu yöntemler, özellikle hızlı tempolu güncellemeler söz konusu olduğunda, bazı sınırlamalara sahiptir:
- Zamanı %100 doğru gösteremeyebilir
- Gereksiz yere kaynak tüketebilir.
- Pürüzsüz ve akıcı bir deneyim sunmayabilir.
requestAnimationFrame
ile Daha İyi Bir Yaklaşım
requestAnimationFrame
, tarayıcıya bir animasyon çerçevesi oluşturmadan önce belirtilen işlevi çağırmasını söyler. Bu, tarayıcının yenileme hızıyla senkronize olarak çalışır ve daha pürüzsüz, verimli güncellemeler sağlar.
İşte React bileşenimizde requestAnimationFrame
kullanarak gerçek zamanlı bir saat oluşturmanın adımları:
- Bileşenin state’inde
dateTime
adında bir değişken oluşturun ve başlangıç değerininew Date()
olarak ayarlayın.
const [dateTime, setDateTime] = useState(new Date());
useEffect
hook’unu kullanarak, bileşen mount olduğundaupdateDateTime
fonksiyonunu çağırın. Bu fonksiyon,dateTime
state’ini günceller verequestAnimationFrame
kullanarak kendisini yeniden çağırır.
useEffect(() => {
let animationFrameId;
const updateDateTime = () => {
setDateTime(new Date());
animationFrameId = requestAnimationFrame(updateDateTime);
};
updateDateTime();
return () => {
if (animationFrameId) {
cancelAnimationFrame(animationFrameId);
}
};
}, []);
- JSX’te,
dateTime
state’ini kullanarak anlık saati render edin.
<div>
{dateTime.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}
</div>
Tüm bunları bir araya getiren kodun tamamı:
import React, { useState, useEffect } from 'react';
function RealTimeClock() {
const [dateTime, setDateTime] = useState(new Date());
useEffect(() => {
let animationFrameId;
const updateDateTime = () => {
setDateTime(new Date());
animationFrameId = requestAnimationFrame(updateDateTime);
};
updateDateTime();
return () => {
if (animationFrameId) {
cancelAnimationFrame(animationFrameId);
}
};
}, []);
return (
<div>
{dateTime.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}
</div>
);
}
export default RealTimeClock;
Bu yaklaşım, saati her saniye güncellerken bile son derece pürüzsüz ve verimli bir şekilde çalışır. Tarayıcının yenileme hızıyla senkronize olduğu için, gereksiz güncellemelerden kaçınır ve kullanıcıya daha iyi bir deneyim sunar.
Sonuç
React uygulamalarında anlık saati göstermek uygulamaya ayrı bir hava katar. setInterval
veya setTimeout
gibi geleneksel yöntemler yerine requestAnimationFrame
kullanmak, daha pürüzsüz, verimli ve kullanıcı dostu bir deneyim sağlar. Bu makalede, requestAnimationFrame
ile React’te gerçek zamanlı bir saat bileşeni oluşturmanın adımlarını gördük. Umarım bu tekniği kendi projelerinizde kullanabilir ve kullanıcılarınıza daha iyi bir deneyim sunabilirsiniz!