以前從未聽過react-toastify?去看看示範
v11 有什麼新功能
我對這個版本感到非常興奮!主要重點是定制,我的目標是賦予您(和我自己)權力,以便您可以完全個性化通知的外觀和感覺。
簡而言之,react-toastify 應該能夠融入任何設計系統。
不再需要導入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類別? !
前往 stackblitz 查看程式碼。
它在實務上是如何運作的?左邊是舊的 DOM 結構,右邊是新的 DOM 結構。
- 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 甚至受控進度條等功能上做出妥協,它只是為您無縫工作。
這是一個小要點。
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 及其直接子類別已被刪除。
?錯誤修復
- 新增對react19的支援 #1177 #1185
- 重新匯出 CloseButtonProps #1165
- 這次修復最新的OnTop #1176
- 不再拋出這個醜陋的錯誤:無法設定未定義的屬性(設定「切換」)#1170
- onClose 回呼不再延遲,直到退出動畫完成 #1179
?下一步是什麼?
我正在逐漸重寫部分文件。我在 stackblitz 上建立了一個集合,這樣您就可以在一個地方找到所有範例。我會不斷添加更多範例。
以上是React-toastify v-終於可以輕鬆自訂了的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

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

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

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具