簡體   English   中英

React - 在顯示組件之前等待來自 CDN 的資產?

[英]React - wait for assets from CDN before showing component?

我正在從外部 CDN 加載樣式表,以便在 React 中設置一個頁面的樣式。 樣式表鏈接被注入<head > 使用react-helmet

<Helmet>
  <link rel="stylesheet" href="example.com/site.css" />
</Helmet>

不幸的是,在加載樣式表之前,有幾毫秒可見的 FOUC。 我正在集成一個外部服務,所以我無法以任何其他方式真正加載樣式。

我試過使用useEffect掛鈎並僅在准備就緒時呈現頁面,如下所示:

const [isPageReady, setPageReady] = useState(false);

useEffect(() => {
  setPageReady(true);
}, []);

return ( 
  isPageReady && ( // my page );
)

但是 FOUC 仍然存在。 有沒有辦法在我顯示頁面之前等待樣式表加載?

根本問題是 CSS 仍在加載,而第一個組件已經在屏幕上。 通常這只需要幾分之一秒,所以您可能只想隱藏您的組件,直到 DOM 完全呈現。

為此,您可以將所有內容封裝在一個頂級 div 中,該 div 在 document.readyState 等於完成之前是不可見的。 這樣,DOM 的渲染將不可見,第一個暴露的屏幕將是一個完全渲染的文檔。

const [visible, setVisible] = useState('hidden');

// This will run one time after the component mounts
useEffect(() => {
  const onPageLoad = () => {
    setVisible('visible');
  };
  // Check if the page has already loaded
  if (document.readyState === 'complete') {
    onPageLoad();
  } else {
    window.addEventListener('load', onPageLoad);
    // Remove the event listener when component unmounts
    return () => window.removeEventListener('load', onPageLoad);
  }
}, []);

return (
  <div style={{ visibility: visible }}>
    <YourPage />
  </div>
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM