首頁 web前端 js教程 React元件卸載、路由跳轉以及頁面關閉(刷新)之前進行提示的實作方法

React元件卸載、路由跳轉以及頁面關閉(刷新)之前進行提示的實作方法

Jan 17, 2019 am 09:45 AM
dom html5 javascript react-router react.js

本篇文章帶給大家的內容是關於React元件卸載、路由跳轉以及頁面關閉(刷新)之前進行提示的實現方法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

React元件卸載生命週期、路由跳轉和頁面關閉三者看起來有些類似的地方,例如都是當前元件即將從視窗消失,但實際上所觸發的事件均不相同。以實際案例出發:

某單頁應用程式的文章編輯頁使用者正在編輯文章,此時尚未儲存。

當使用者不小心要跳到另外一個路由時需要提醒使用者是否繼續跳轉,這個過程需要觸發路由跳轉以及元件卸載;

而使用者不小心點了關閉標籤頁按鈕,或重新整理了頁面。這個過程觸發了頁面卸載事件;

在這個案例中我們需要實現:

1. 用戶跳轉頁面時彈出提示框(路由採用histroy模式)

2. 使用者關閉頁面時彈出提示框

componentWillUnmount

首先這個鉤子函數是在元件卸載前呼叫的一個函數,它並不能阻止目前元件的卸載。所以不要想辦法在這裡做提示,因為即便提示了,元件還是會卸載,文章還是會消失。

路由守衛-<Prompt/>

#為了實現第一個功能,需要一個跳轉路由之前進行的判斷。在react-router-dom 4.0 之後取消了先前的路由守衛(其實我沒研究過之前版本的,這個描述摘自網路)。在react-router-dom 4.0之後,實作這個功能可以依賴<Prompt/>元件。文件連結↗

把這個元件加到你的文章編輯頁元件的任意部分

import {Prompt} from 'react-router-dom';
const Editor=()=>{
    return (
        <div>
          <Prompt
            when={true}
            message={location => '文章要保存吼,确定离开吗?'}
          />
        </div>
    )
}
登入後複製

這裡有一點要注意,使用<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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱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.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

See all articles