Hata Ansiklopedisi

Reaktif bağlam içinde izin verilmeyen fonksiyon çağrısı

Reaktif bir bağlam içinde çalıştırılmasına izin verilmeyen bir fonksiyon, reaktif bir bağlamdan çağrıldı.

Örneğin, bir effect bir computed içinden veya aktif olarak çalışan bir effect'ten zamanlanamaz. Şablon ifadelerinin bir parçası olarak effect gibi fonksiyonları çağırmaktan kaçının, çünkü bunlar kendi reaktif bağlamlarında çalışır.

Computed ifadelerinin saf (pure) olması beklenir. Saf, ifadelerin herhangi bir yan etki tetiklememesi anlamına gelir. Yan etkiler afterNextRender/afterEveryRender zamanlama, yeni bir effect oluşturma veya observable'lara abone olma gibi işlemlerdir.

Bazı işlemler yaygın tuzaklardan kaçınmak için reaktif bağlamlarda açıkça yasaklanmıştır. Örneğin, bir computed içinde afterNextRender/afterEveryRender kullanmak, computed ifadesi her değerlendirildiğinde yeni render kancaları zamanlayacaktır. Bu muhtemelen amaçlanan bir davranış değildir ve uygulama performansını düşürebilir.

Hatayı düzeltme

Bu hata kılavuzu kapsamlı değildir. Birkaç yaygın senaryoyu ve hatanın nasıl ele alınacağını kapsar.

afterNextRender/afterEveryRender

afterNextRender/afterEveryRender çağrısını reaktif bağlamın dışına taşıyın.

Render sonrası kancayı zamanlamak için iyi bir yer, bileşenin sınıf constructor'ıdır. Alternatif olarak, reaktif bağlamdan çıkmak ve bu hatayı açıkça devre dışı bırakmak için untracked kullanın.

effect

effect çağrısını reaktif bağlamın dışına taşıyın.

Bir effect zamanlamak için iyi bir yer @Component sınıf constructor'ıdır.

toSignal

toSignal çağrısını reaktif bağlamın dışına taşıyın.

result = computed(() => {
  const dataSignal = toSignal(dataObservable$);
  return doSomething(dataSignal());
});

şu şekilde yeniden düzenlenebilir:

dataSignal = toSignal(dataObservable$);
result = computed(() => doSomething(dataSignal()));

Alternatif olarak, bu mümkün değilse, observable'a manuel olarak abone olmayı düşünün.

Son çare olarak, reaktif bağlamdan çıkmak için untracked kullanın. Reaktif bağlamdan çıkmanın untracked içindeki sinyal okumalarının göz ardı edilmesine yol açabileceğine dikkat edin.

Hatayı ayıklama

Hata mesajı beklenmedik şekilde çağrılan fonksiyonu belirtir. Uygulama kodunuzda bu fonksiyon çağrısını arayın.

Alternatif olarak, tarayıcınızdaki yığın izi fonksiyonun nereden çağrıldığını ve nerede bulunduğunu gösterecektir.