CodeBlanks Logo Icon CodeBlanks

watchPositionAsync

watchPositionAsync ile konum takibini öğrenirsin.

watchPositionAsync

Kullanıcı hareket ettikçe konumu sürekli izlemek için Location.watchPositionAsync kullanılır. Bu işlev bir abonelik döndürür; her konum değişiminde bir geri çağırma çağrılır. Bileşen kapanınca abonelik subscription.remove() ile kaldırılır.

İşlev iki parametre alır: bir seçenek nesnesi ve bir geri çağırma. Örnek: const sub = await Location.watchPositionAsync({ accuracy: Location.Accuracy.High }, (loc) => console.log(loc.coords)). Abonelik bir değişkene atanır; temizlik useEffect'in dönüşünde yapılır. Bu kalıp, harita uygulamalarında kullanıcı imlecini canlı tutar.

useEffect ve temizlik

Sürekli konum izlemeyi useEffect içinde kurarsın. Bu hook, bileşen ekrana geldiğinde bir kez çağrılır. İçinde aboneliği kurar, dışında da bir temizlik işlevi döndürürsün. Temizlik işlevi bileşen kapanınca aboneliği kaldırır; böylece konum güncellemeleri durur.

Örnek kalıp: useEffect(() => {{ (async () => {{ const sub = await Location.watchPositionAsync(...); subscriptionRef.current = sub; }})(); return () => subscriptionRef.current?.remove(); }}, []). Boş bağımlılık dizisi [] hook'un yalnızca bir kez çağrılmasını sağlar. Aboneliği ref'te tutarsın çünkü async işlevin içinde oluşturulur.

Uygulama Sürekli konum izle

Boş useEffect'i tamamla. const sub = await Location.watchPositionAsync({ accuracy: Location.Accuracy.High }, (loc) => console.log(loc.coords)) çağır. return () => sub.remove() ile temizle. useEffect'in ikinci parametresi [] olsun.

Başlangıç kodu

App.js
import React from 'react';
import * as Location from 'expo-location';

export function useWatchLocation() {
  React.useEffect(() => {
    let sub;
    // sürekli konum izle ve temizlik döndür
  }, []);
}

Örnek çözüm

App.js
let sub;
(async () => {
  sub = await Location.watchPositionAsync(
    { accuracy: Location.Accuracy.High },
    (loc) => console.log(loc.coords)
  );
})();
return () => sub && sub.remove();

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Abonelik değişkenini yaz

Soru
const ____ = await Location.watchPositionAsync(options, callback);
Cevap
const subscription = await Location.watchPositionAsync(options, callback);

Açıklama: subscription değişkeni aboneliği taşır.

2 Parçayı rolüne eşle

Kavram Anlamı
watchPositionAsync Sürekli izler
subscription.remove() Aboneliği kaldırır
useEffect Kurulum yeri
accuracy Doğruluk seçeneği

3 Bileşen kapanınca ne yapılır?

App.js
return () => { ??? }
  • Yeni abonelik aç
  • Konum güncellemesini bekle
  • Aboneliği remove() ile kaldır Doğru cevap
  • Hata fırlat

Açıklama: Bileşen kapanınca abonelik remove() ile kaldırılır.

İleri seviye bölümündeki tüm dersler