91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react如何實現跳轉前記住頁面狀態

發布時間:2023-01-06 14:38:07 來源:億速云 閱讀:226 作者:iii 欄目:web開發

這篇文章主要介紹了react如何實現跳轉前記住頁面狀態的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇react如何實現跳轉前記住頁面狀態文章都會有所收獲,下面我們一起來看看吧。

react實現跳轉前記住頁面狀態的方法:1、監聽path變化,當path變化時更新lastPath和currentPath到redux store中;2、在離開頁面A時,將頁面狀態保存到redux store中;3、如果redux store中的lastPath等于頁面B的path,則認為A是由B返回還原狀態,否則不還原。

React 頁面返回保留上次狀態

需求

  • 頁面A跳轉到頁面B然后再返回頁面A,頁面A要還原離開前的狀態;

  • 頁面A和頁面B有多個入口,從其它頁面跳轉到頁面A,頁面A不還原狀態。

設計

  • 監聽path變化,當path變化時更新lastPath和currentPath到redux store中;

  • 離開頁面A時,將頁面狀態保存到redux store中;

  • 進入頁面A時,如果redux store中的lastPath等于頁面B的path,則認為A是由B返回還原狀態,否則不還原。

實現

項目采用react-router + dva庫,實現部分會涉及相關技術。

監聽path變化,通過history監聽path變化,并記錄lastPath和currentPath。這里采用dva的subscriptions,訂閱history,當path變化同步path信息到state。

const model = {
  namespace: "global",
  state: {
    pathName: { last: "", current: "" },
  },
  reducers: {
    setPathName(state: any, { pathName }: any) {
      state.pathName.last = state.pathName.current;
      state.pathName.current = pathName;
    },
   
  effects: {
  },
  subscriptions: {
    setup({ history, dispatch }: any) {
      return history.listen(({ pathName }: any) => {
        dispatch({ type: "global/setPathName", pathName });
      });
    }
  }
};

頁面卸載時同步狀態到redux store,比如:

componentWillUnmount() {
    const { dispatch } = this.props;
    const { activeKey } = this.state;
    dispatch({
      type: "projectInfo/setProjectInfoPage",
      payload: { activeKey }
    });
  }

頁面重新加載時,比如:

state = {
    activeKey: pathToRegexp(PagePath.B).exec(pathName.last) ? activeKey : ""
  };

pathToRegexp來自path-to-regexp庫,用于路由匹配,此處用來判斷上個頁面是否為頁面B。

其它方案

A頁面是否由B頁面返回的判斷:B頁面返回時添加state,history.push({ pathname: path, state: {from} });,進入A頁面根據state判斷是否由B頁面返回。但當B有多個入口,返回時需要知道頁面來源,否則無法返回,邏輯稍顯復雜且容易出錯。

關于“react如何實現跳轉前記住頁面狀態”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“react如何實現跳轉前記住頁面狀態”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

元谋县| 夹江县| 江门市| 阿拉善左旗| 双桥区| 内丘县| 武穴市| 永川市| 武冈市| 嘉鱼县| 晋江市| 枣强县| 桦南县| 吉林市| 永寿县| 日照市| 万荣县| 泗阳县| 葵青区| 沛县| 贡嘎县| 铜陵市| 攀枝花市| 临猗县| 都匀市| 依兰县| 华安县| 龙门县| 威信县| 金川县| 永靖县| 玉树县| 阿坝| 方山县| 房产| 黔南| 罗城| 玉门市| 德昌县| 武汉市| 新沂市|