flushSync
flushSync, sağlanan callback içindeki herhangi bir güncellemeyi zorla ve senkronize bir şekilde işlemeye olanak sağlar. Bu, DOM’u anında güncelleyecektir.
flushSync(callback)Başvuru dokümanı
flushSync(callback)
Bekleyen tüm islemleri aninda calistirmak ve DOM’u hemen güncellemek için flushSync fonksiyonunu kullanın.
import { flushSync } from 'react-dom';
flushSync(() => {
setSomething(123);
});Çoğunlukla, flushSync kullanmanıza gerek yoktur. flushSync’i sadece son çareniz olduğunda kullanın.
Daha fazla örnek için aşağıdaki linki tıklayın.
Parametreler
callback: Bir fonksiyon. React, bu callback’i hemen çağırır ve içerdiği tüm güncellemeleri senkronize bir şekilde gerçekleştirir. Aynı zamanda bekleyen güncellemeleri, Effect’leri veya Effect’ler içindeki güncellemeleri de gerçekleştirebilir. EğerflushSyncçağrısı sonucunda bir güncelleme duraklatılırsa, fallback’ler tekrar görünebilir.
Geri Döndürür
flushSync undefined geri döndürür.
Uyarılar
flushSyncperformansı önemli ölçüde düşürebilir. Sınırlı şekilde kullanın.flushSyncbekleyen Suspense sınırlarınıfallbackdurumunu göstermeye mecbur bırakabilir.flushSyncbekleyen effect’leri tetikleyebilir ve içerdikleri güncellemeleri döndürmeden önce senkron bir şekilde uygulayabilir.flushSynccallback içindeki güncellemeleri işlemek gerektiğinde, callback dışındaki güncellemeleri işleyebilir. Örneğin, bir tıklama sonucu bekleyen güncellemeler varsa, React bu güncellemeleri callback içindeki güncellemeleri işlemeden önce işleyebilir.
Kullanım
Üçüncü Parti Entegrasyonlar için Güncellemeleri İşleme
Tarayıcı API’leri veya UI kütüphaneleri gibi üçüncü parti kodlarıyla entegrasyon sağlarken, React’in güncellemeleri zorla işlemesi gerekebilir. Callback içerisindeki herhangi bir durum güncellemesi’ni senkron bir şekilde işlemek için flushSync kullanın:
flushSync(() => {
setSomething(123);
});
// Bu satıra gelindiğinde, DOM güncellenmiştir.Bir sonraki kod satırı çalıştığında, React’in zaten DOM’u güncellediğini garanti eder.
flushSync kullanımı yaygın değildir ve sık kullanımı uygulamanızın performansını büyük ölçüde düşürebilir. Eğer uygulamanız sadece React API’lerini kullanıyorsa ve üçüncü parti kütüphanelerle entegre değilse, flushSync’e ihtiyaç duyumamalıdır.
Ancak, tarayıcı API’leri gibi üçüncü parti kodlarla entegrasyon yapmak için kullanışlı olabilir.
Bazı tarayıcı API’leri, callback içindeki sonuçların callback’in sonuna kadar DOM’a senkron bir şekilde yazılmasını bekler, böylece tarayıcı, oluşturulan DOM ile bir şeyler yapabilir. Çoğu durumda, React bunu sizin için otomatik olarak halleder. Ancak bazı durumlarda senkron bir güncellemeyi zorlamak gerekebilir.
Örneğin, tarayıcının onbeforeprint API’si, yazdırma iletişim kutusu açılmadan hemen önce sayfayı değiştirmenize olanak sağlar. Bu, belgenin yazdırma için daha iyi bir şekilde görüntülenmesine olanak sağlayan özel yazdırma stillerinin uygulanması için yararlıdır. Aşağıdaki örnekte, onbeforeprint callback’inde flushSync’i hemen React durumunu DOM’a “güncellemek” için kullanıyorsunuz. Böylece, yazdırma penceresi açıldığında, isPrinting “yes” olarak görünür:
import { useState, useEffect } from 'react'; import { flushSync } from 'react-dom'; export default function PrintApp() { const [isPrinting, setIsPrinting] = useState(false); useEffect(() => { function handleBeforePrint() { flushSync(() => { setIsPrinting(true); }) } function handleAfterPrint() { setIsPrinting(false); } window.addEventListener('beforeprint', handleBeforePrint); window.addEventListener('afterprint', handleAfterPrint); return () => { window.removeEventListener('beforeprint', handleBeforePrint); window.removeEventListener('afterprint', handleAfterPrint); } }, []); return ( <> <h1>isPrinting: {isPrinting ? 'yes' : 'no'}</h1> <button onClick={() => window.print()}> Print </button> </> ); }
flushSync olmadığında, yazdırma diyalogu isPrinting’i “hayır” olarak gösterir. Bunun sebebi, React’in güncellemeleri asenkron bir şekilde biriktirmesi ve yazdırma diyalogunun durum güncellenmeden önce görüntülenmesidir.