欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

React組件如何實(shí)現(xiàn)卸載、路由跳轉(zhuǎn)以及頁(yè)面關(guān)閉之前進(jìn)行提示的功能

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

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)絡(luò)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、久治網(wǎng)站維護(hù)、網(wǎng)站推廣。

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

某單頁(yè)應(yīng)用的文章編輯頁(yè)用戶正在編輯文章,此時(shí)尚未保存。

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

而用戶不小心點(diǎn)了關(guān)閉標(biāo)簽頁(yè)按鈕,或刷新了頁(yè)面。這個(gè)過(guò)程觸發(fā)了頁(yè)面卸載事件;

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

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

2. 用戶關(guān)閉頁(yè)面時(shí)彈出提示框

componentWillUnmount

首先這個(gè)鉤子函數(shù)是在組件卸載前調(diào)用的一個(gè)函數(shù),它并不能阻止當(dāng)前組件的卸載。所以不要想方設(shè)法在這里做提示,因?yàn)榧幢闾崾玖耍M件還是會(huì)卸載,文章還是會(huì)消失。

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

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

把這個(gè)組件添加到你的文章編輯頁(yè)組件的任意部分

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

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

窗口關(guān)閉事件-beforeunload

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

應(yīng)該在組件掛載時(shí)監(jiān)聽事件,組件卸載時(shí)移除事件監(jiān)聽。因?yà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 ...
}

這里有幾個(gè)需要注意的地方:

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

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

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

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

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

網(wǎng)站標(biāo)題:React組件如何實(shí)現(xiàn)卸載、路由跳轉(zhuǎn)以及頁(yè)面關(guān)閉之前進(jìn)行提示的功能
瀏覽地址:http://chinadenli.net/article46/pghohg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、外貿(mào)建站、小程序開發(fā)、云服務(wù)器、品牌網(wǎng)站建設(shè)、營(yíng)銷型網(wǎng)站建設(shè)

廣告

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

h5響應(yīng)式網(wǎng)站建設(shè)