React組件如何實現(xiàn)卸載、路由跳轉(zhuǎn)以及頁面關閉之前進行提示的功能-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關React組件如何實現(xiàn)卸載、路由跳轉(zhuǎn)以及頁面關閉之前進行提示的功能的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)公司是一家網(wǎng)站設計公司,集創(chuàng)意、互聯(lián)網(wǎng)應用、軟件技術(shù)為一體的創(chuàng)意網(wǎng)站建設服務商,主營產(chǎn)品:響應式網(wǎng)站開發(fā)成都品牌網(wǎng)站建設、成都營銷網(wǎng)站建設。我們專注企業(yè)品牌在網(wǎng)站中的整體樹立,網(wǎng)絡互動的體驗,以及在手機等移動端的優(yōu)質(zhì)呈現(xiàn)。成都網(wǎng)站設計、網(wǎng)站制作、移動互聯(lián)產(chǎn)品、網(wǎng)絡運營、VI設計、云產(chǎn)品.運維為核心業(yè)務。為用戶提供一站式解決方案,我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞析悅目的作品,網(wǎng)站的價值服務。

React組件卸載生命周期、路由跳轉(zhuǎn)和頁面關閉三者看起來有些類似的地方,比如都是當前組件即將從視口消失,但實際上所觸發(fā)的事件均不相同。以一個實際案例出發(fā):

某單頁應用的文章編輯頁用戶正在編輯文章,此時尚未保存。

當用戶不小心要跳轉(zhuǎn)到另外一個路由時需要提醒用戶是否繼續(xù)跳轉(zhuǎn),這個過程需要觸發(fā)路由跳轉(zhuǎn)以及組件卸載;

而用戶不小心點了關閉標簽頁按鈕,或刷新了頁面。這個過程觸發(fā)了頁面卸載事件;

在這個案例中我們需要實現(xiàn):

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

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

componentWillUnmount

首先這個鉤子函數(shù)是在組件卸載前調(diào)用的一個函數(shù),它并不能阻止當前組件的卸載。所以不要想方設法在這里做提示,因為即便提示了,組件還是會卸載,文章還是會消失。

路由守衛(wèi)-<Prompt/>

為了實現(xiàn)第一個功能,需要一個跳轉(zhuǎn)路由之前進行的判斷。在react-router-dom 4.0 之后取消了先前的路由守衛(wèi)(其實我沒研究過之前版本的,這個描述摘自網(wǎng)絡)。在react-router-dom 4.0之后,實現(xiàn)這個功能可以依靠<Prompt/>組件。文檔鏈接↗

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

import {Prompt} from 'react-router-dom';
const Editor=()=>{
    return (
        <div>
          <Prompt
           when={true}
            message={location => '文章要保存吼,確定離開嗎?'}
          />
        </div>
    )
}

這里有一點需要注意,使用<Prompt/>時,你的路由跳轉(zhuǎn)必須通過<Link/>實現(xiàn),而不能依靠<a/>原生標簽。
點擊取消時就會留在當前頁面。至此已經(jīng)實現(xiàn)了路由跳轉(zhuǎn)時提醒用戶進行保存的功能。

窗口關閉事件-beforeunload

實現(xiàn)第二個功能需要依靠對窗口的監(jiān)聽。React應用中對于窗口事件的應用遠沒有DOM事件頻繁,所以好久沒碰到還是有點手生的。最關鍵的就是,應該在何時進行監(jiān)聽?

應該在組件掛載時監(jiān)聽事件,組件卸載時移除事件監(jiān)聽。因為我已經(jīng)開始全面采用hooks新特性了,所以這里使用到useEffect。

import React,{useEffect} from 'react';

const Editor=()=>{

 //監(jiān)聽窗口事件
    useEffect(() => {
        const listener = ev => {
            ev.preventDefault();
            ev.returnValue='文章要保存吼,確定離開嗎?';
        };
       window.addEventListener('beforeunload', listener);
        return () => {
           window.removeEventListener('beforeunload', listener)
        }
    }, []);
    
//return ...
}

這里有幾個需要注意的地方:

1、useEffect第二個參數(shù)為空數(shù)組,表示只調(diào)用了componentDidMount和componentWillUnmount兩個鉤子

2、事件監(jiān)聽和移除的第二個參數(shù)為同一個事件處理函數(shù)

3、在beforeunload事件中的confirm,prompt,alert會被忽略。取而代之的是一個瀏覽器內(nèi)置的對話框。(參考:MDN|beforeunload)

4、必須要有returnValue且為非空字符串,但是在某些瀏覽器中這個值并不會作為彈窗信

感謝各位的閱讀!關于React組件如何實現(xiàn)卸載、路由跳轉(zhuǎn)以及頁面關閉之前進行提示的功能就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章標題:React組件如何實現(xiàn)卸載、路由跳轉(zhuǎn)以及頁面關閉之前進行提示的功能-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://muchs.cn/article18/dpdjgp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗、移動網(wǎng)站建設、網(wǎng)站內(nèi)鏈、企業(yè)建站、云服務器、網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設