首頁 >web前端 >前端問答 >react跳轉前記住頁面狀態怎麼實現

react跳轉前記住頁面狀態怎麼實現

藏色散人
藏色散人原創
2023-01-06 13:59:022380瀏覽

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

react跳轉前記住頁面狀態怎麼實現

本教學操作環境:Windows10系統、react18.0.0版、Dell G3電腦。

react跳轉前記住頁面狀態怎麼實現?

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有多個入口,返回時需要知道頁面來源,否則無法返回,邏輯稍微複雜且容易出錯。

總結

本文提出了一個頁面返回保留上次狀態的解決方案,適用於頁面有多個入口和出口的情況。此方案中採用了監聽history變更的方式,並記錄上次頁面位址,從而給是否還原狀態提供了依據。

推薦學習:《react影片教學

以上是react跳轉前記住頁面狀態怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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