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
flushSync
performansı önemli ölçüde düşürebilir. Sınırlı şekilde kullanın.flushSync
bekleyen Suspense sınırlarınıfallback
durumunu göstermeye mecbur bırakabilir.flushSync
bekleyen effect’leri tetikleyebilir ve içerdikleri güncellemeleri döndürmeden önce senkron bir şekilde uygulayabilir.flushSync
callback 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.