搜尋
首頁web前端js教程React-toastify v-終於可以輕鬆自訂了

以前從未聽過react-toastify?去看看示範

v11 有什麼新功能

我對這個版本感到非常興奮!主要重點是定制,我的目標是賦予您(和我自己)權力,以便您可以完全個性化通知的外觀和感覺。

簡而言之,react-toastify 應該能夠融入任何設計系統。

React-toastify v- finally easy to customize

不再需要導入css文件

樣式表現在會自動注入,因此您不再需要匯入它。 CSS 檔案仍然由庫匯出。

  import { ToastContainer, toast } from 'react-toastify';

  function App(){
    const notify = () => toast("Wow so easy !");

    return (
      <div>
        <button onclick="{notify}">Notify !</button>
        <toastcontainer></toastcontainer>
      </div>
    );
  }

輕鬆訂製!

最重要的請求之一是如何自訂通知。公平地說,在這個版本之前,它非常具有挑戰性,因為它需要用戶覆蓋大量 CSS 類別。

我透過刪除無關的 div 元素、嵌套元素等簡化了通知的 DOM 結構...這是一個重大的突破性更改,但確實值得付出努力。我可以自信地說,該庫現在可以無縫整合到任何設計系統中。

下面,我只使用 Tailwind 實作了幾種不同的設計。 我沒有覆蓋react-toastify中的單一CSS類別? !

React-toastify v- finally easy to customize

前往 stackblitz 查看程式碼。

它在實務上是如何運作的?左邊是舊的 DOM 結構,右邊是新的 DOM 結構。

React-toastify v- finally easy to customize

  • Toastify__toast-body 和它的孩子現在完全消失了。
  • CloseButton 現在使用絕對位置。

由於這些更改,沒有任何內容會幹擾您的內容。

Toastify__toast 有一些合理的預設值(例如,邊框半徑、陰影等),可以使用 css 或透過更新關聯的 css 變數來自訂:

width: var(--toastify-toast-width);
min-height: var(--toastify-toast-min-height);
padding: var(--toastify-toast-padding);
border-radius: var(--toastify-toast-bd-radius);
box-shadow: var(--toastify-toast-shadow);
max-height: var(--toastify-toast-max-height);
font-family: var(--toastify-font-family);

自訂進度條

在開發此版本時,允許自訂進度列根本不在我的待辦事項清單中。但看到現在自訂通知是多麼容易,我無法抗拒? .

最好的部分是,您不必在 autoClose、pauseOnHover、pauseOnFocusLoss 甚至受控進度條等功能上做出妥協,它只是為您無縫工作。

React-toastify v- finally easy to customize

這是一個小要點。

function App() {
  const notify = () => {
    toast(CustomComponent, {
      autoClose: 8000,
      // removes the built-in progress bar
      customProgressBar: true
    });
  };

  return (
    <div>
      <button onclick="{notify}">notify</button>
      <toastcontainer></toastcontainer>
    </div>
  );
}

// isPaused is now available in your component
// it tells you when to pause the animation: pauseOnHover, pauseOnFocusLoss etc...
function CustomComponent({ isPaused, closeToast }: ToastContentProps) {
  return (
    <div>
      <span>Hello</span>
      <mycustomprogressbar ispaused="{isPaused}" onanimationend="{()"> closeToast()} />
    </mycustomprogressbar>
</div>
  );
}

前往 stackblitz 查看實例。

輔助使用和鍵盤導航

ToastContainer 和 toast 接受 ariaLabel 屬性(最後......)。這對於螢幕閱讀器和測試非常有幫助。
例如,在 cypress 中,您可以執行 cy.findByRole("alert", {name: "您指定的 aria label"}).

  import { ToastContainer, toast } from 'react-toastify';

  function App(){
    const notify = () => toast("Wow so easy !");

    return (
      <div>
        <button onclick="{notify}">Notify !</button>
        <toastcontainer></toastcontainer>
      </div>
    );
  }

如果通知可見且使用者按 alt t,它將聚焦於第一個通知,允許使用者使用 Tab 瀏覽通知中的不同元素。

熱鍵當然可以更改。

width: var(--toastify-toast-width);
min-height: var(--toastify-toast-min-height);
padding: var(--toastify-toast-padding);
border-radius: var(--toastify-toast-bd-radius);
box-shadow: var(--toastify-toast-shadow);
max-height: var(--toastify-toast-max-height);
font-family: var(--toastify-font-family);

onClose 回呼通知刪除原因

您想知道用戶是否關閉了通知還是自動關閉了?請放心,這現在成為可能!

onClose 回呼的簽章現在是 onClose(reason?: boolean | string) =>無效。

當使用者關閉通知時,reason 參數等於 true。在下面的範例中,我將我的參數命名為
刪除了用戶以明確意圖。

function App() {
  const notify = () => {
    toast(CustomComponent, {
      autoClose: 8000,
      // removes the built-in progress bar
      customProgressBar: true
    });
  };

  return (
    <div>
      <button onclick="{notify}">notify</button>
      <toastcontainer></toastcontainer>
    </div>
  );
}

// isPaused is now available in your component
// it tells you when to pause the animation: pauseOnHover, pauseOnFocusLoss etc...
function CustomComponent({ isPaused, closeToast }: ToastContentProps) {
  return (
    <div>
      <span>Hello</span>
      <mycustomprogressbar ispaused="{isPaused}" onanimationend="{()"> closeToast()} />
    </mycustomprogressbar>
</div>
  );
}

如果您在通知中使用自訂元件,您可能需要更多地控制原因,特別是當它包含
多次號召性用語。

toast("hello", {
  ariaLabel: "something"
})

?重大變化

useToastContainer 和 useToast 不再公開

除非您深入研究react-toastify原始程式碼以了解如何將事物黏合在一起,否則這些鉤子是無法使用的。這不是我想要給我的用戶的,一開始曝光他們就是一個錯誤的決定,我已經吸取了很好的教訓。

onClose 和 onOpen 不再接收子屬性

事後看來,我根本不該這麼做。該功能實際上並沒有被使用。每個回調的新簽名下方:

  • onOpen: () =>;無效
  • onClose: (原因?: boolean | string) =>無效

造型

  • React-toastify/dist/ReactToastify.minimal.css 已被刪除。
  • Scss 現在已經不存在了。該庫使用了很好的舊 css。
  • 不再需要 bodyClassName 和 bodyStyle。
  • ProgressBarStyle 是為了減少 api 表面。它們現在是在不依賴內聯樣式的情況下自訂所有內容的更好方法。
  • 注入樣式已被刪除。不再需要此功能。
  • CSS 類別 Toastify__toast-body 及其直接子類別已被刪除。 React-toastify v- finally easy to customize

?錯誤修復

  • 新增對react19的支援 #1177 #1185
  • 重新匯出 CloseButtonProps #1165
  • 這次修復最新的OnTop #1176
  • 不再拋出這個醜陋的錯誤:無法設定未定義的屬性(設定「切換」)#1170
  • onClose 回呼不再延遲,直到退出動畫完成 #1179

?下一步是什麼?

我正在逐漸重寫部分文件。我在 stackblitz 上建立了一個集合,這樣您就可以在一個地方找到所有範例。我會不斷添加更多範例。

React-toastify v- finally easy to customize

以上是React-toastify v-終於可以輕鬆自訂了的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
在JavaScript中替換字符串字符在JavaScript中替換字符串字符Mar 11, 2025 am 12:07 AM

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

構建您自己的Ajax Web應用程序構建您自己的Ajax Web應用程序Mar 09, 2025 am 12:11 AM

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

10個JQuery Fun and Games插件10個JQuery Fun and Games插件Mar 08, 2025 am 12:42 AM

10款趣味橫生的jQuery遊戲插件,讓您的網站更具吸引力,提升用戶粘性!雖然Flash仍然是開發休閒網頁遊戲的最佳軟件,但jQuery也能創造出令人驚喜的效果,雖然無法與純動作Flash遊戲媲美,但在某些情況下,您也能在瀏覽器中獲得意想不到的樂趣。 jQuery井字棋遊戲 遊戲編程的“Hello world”,現在有了jQuery版本。 源碼 jQuery瘋狂填詞遊戲 這是一個填空遊戲,由於不知道單詞的上下文,可能會產生一些古怪的結果。 源碼 jQuery掃雷遊戲

jQuery視差教程 - 動畫標題背景jQuery視差教程 - 動畫標題背景Mar 08, 2025 am 12:39 AM

本教程演示瞭如何使用jQuery創建迷人的視差背景效果。 我們將構建一個帶有分層圖像的標題橫幅,從而創造出令人驚嘆的視覺深度。 更新的插件可與JQuery 1.6.4及更高版本一起使用。 下載

如何創建和發布自己的JavaScript庫?如何創建和發布自己的JavaScript庫?Mar 18, 2025 pm 03:12 PM

文章討論了創建,發布和維護JavaScript庫,專注於計劃,開發,測試,文檔和促銷策略。

如何在瀏覽器中優化JavaScript代碼以進行性能?如何在瀏覽器中優化JavaScript代碼以進行性能?Mar 18, 2025 pm 03:14 PM

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

Matter.js入門:簡介Matter.js入門:簡介Mar 08, 2025 am 12:53 AM

Matter.js是一個用JavaScript編寫的2D剛體物理引擎。此庫可以幫助您輕鬆地在瀏覽器中模擬2D物理。它提供了許多功能,例如創建剛體並為其分配質量、面積或密度等物理屬性的能力。您還可以模擬不同類型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流瀏覽器。此外,它也適用於移動設備,因為它可以檢測觸摸並具有響應能力。所有這些功能都使其值得您投入時間學習如何使用該引擎,因為這樣您就可以輕鬆創建基於物理的2D遊戲或模擬。在本教程中,我將介紹此庫的基礎知識,包括其安裝和用法,並提供一

使用jQuery和Ajax自動刷新DIV內容使用jQuery和Ajax自動刷新DIV內容Mar 08, 2025 am 12:58 AM

本文演示瞭如何使用jQuery和ajax自動每5秒自動刷新DIV的內容。 該示例從RSS提要中獲取並顯示了最新的博客文章以及最後的刷新時間戳。 加載圖像是選擇

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具