本篇文章帶給大家的內容是關於React元件卸載、路由跳轉以及頁面關閉(刷新)之前進行提示的實現方法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
React元件卸載生命週期、路由跳轉和頁面關閉三者看起來有些類似的地方,例如都是當前元件即將從視窗消失,但實際上所觸發的事件均不相同。以實際案例出發:
某單頁應用程式的文章編輯頁使用者正在編輯文章,此時尚未儲存。當使用者不小心要跳到另外一個路由時需要提醒使用者是否繼續跳轉,這個過程需要觸發路由跳轉以及元件卸載;
而使用者不小心點了關閉標籤頁按鈕,或重新整理了頁面。這個過程觸發了頁面卸載事件;
在這個案例中我們需要實現:
1. 用戶跳轉頁面時彈出提示框(路由採用histroy模式)
2. 使用者關閉頁面時彈出提示框
componentWillUnmount
首先這個鉤子函數是在元件卸載前呼叫的一個函數,它並不能阻止目前元件的卸載。所以不要想辦法在這裡做提示,因為即便提示了,元件還是會卸載,文章還是會消失。
路由守衛-<prompt></prompt>
#為了實現第一個功能,需要一個跳轉路由之前進行的判斷。在react-router-dom 4.0
之後取消了先前的路由守衛(其實我沒研究過之前版本的,這個描述摘自網路)。在react-router-dom 4.0
之後,實作這個功能可以依賴<prompt></prompt>
元件。文件連結↗
把這個元件加到你的文章編輯頁元件的任意部分
import {Prompt} from 'react-router-dom'; const Editor=()=>{ return ( <div> <prompt> '文章要保存吼,确定离开吗?'} /> </prompt> </div> ) }
這裡有一點要注意,使用<prompt></prompt>時,你的路由跳轉必須透過實現,而不能依賴原生標籤。
點擊取消時就會留在目前頁面。至此已經實現了路由跳轉時提醒用戶進行保存的功能。
視窗關閉事件-beforeunload
實作第二個功能需要依賴對視窗的監聽。 React應用程式中對於視窗事件的應用遠沒有DOM事件頻繁,所以好久沒碰到還是有點手生的。最關鍵的就是,何時該進行監聽?
應該在元件掛載時監聽事件,元件卸載時移除事件監聽。因為我已經開始全面採用hooks新功能了,所以這裡使用到useEffect。
import React,{useEffect} from 'react'; const Editor=()=>{ //监听窗口事件 useEffect(() => { const listener = ev => { ev.preventDefault(); ev.returnValue='文章要保存吼,确定离开吗?'; }; window.addEventListener('beforeunload', listener); return () => { window.removeEventListener('beforeunload', listener) } }, []); //return ... }
這裡有幾個要注意的地方:
1、useEffect第二個參數為空數組,表示只呼叫了componentDidMount和componentWillUnmount兩個鉤子
2 、事件監聽和移除的第二個參數為同一個事件處理函數
3、在beforeunload事件中的confirm,prompt,alert會被忽略。取而代之的是一個瀏覽器內建的對話框。 (參考:MDN|beforeunload)
4、必須要有returnValue且為非空白字串,但是在某些瀏覽器中這個值並不會作為彈窗信
以上是React元件卸載、路由跳轉以及頁面關閉(刷新)之前進行提示的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Atom編輯器mac版下載
最受歡迎的的開源編輯器