react 回退到前一页面对应位置

本文分享了解决React应用中页面跳转后返回原位置的问题,通过在Redux中保存滚动位置,实现在返回时恢复到跳转前的位置,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  由于react的在跳转页面的时候,实际做了unmount的动作,清楚了前一页面的内容,返回的时候实际上是需要重新渲染的,相应的跳转位置就会丢失。我再做项目开发的过程中也遇到了相同的问题,我把我解决的过程分享给大家,希望能够帮到你。

 解决问题的技术背景

1.我们的app是使用了上啦加载下啦刷新的插件(自己封装的),采用的是固定的高度(屏幕高度),自定义滚动轴(非浏览器滚动轴),这个插件会实时的记录滚动位置。

2.APP首页分为十一个子模块,每个子模块都有一个接口去拉取对应模块的数据,拉取完成后会将数据存储到redux里面

3.首页的每个模块都有很多链接跳转到其他页面(商品列表,商品详情,活动专题页面,快速下单页面等)

4.app使用的技术栈react + redux + react-router 

存在的问题以及要解决的问题

1.首页滚动后跳转到其他页面,然后点击返回的时候,首页又重新回到了首页,如果已经滚动了十几页,客户再访问的时候又需要重新滚动到下面,体验很差,运营希望解决掉这个问题,返回的时候还返回到对应跳走的位置,不仅仅是首页 也包括(产品列表页,专题页面,快速下单页面,文章列表页面等)

解决过程

解决思路如下

1.我采用的是把数据先全部保存到redux里面,减少返回重新请求服务器的次数,也减少请求服务器的时间

2.在页面跳转的时候,由于首页,列表页,快速下单,以及其他的列表页面我都引入了上啦加载下拉刷新组件(我再后面的介绍中撑为pullload),在pulload中实际上是有实时将scroll位置记录到redux里面的,所以我只要在pullload 卸载(unmount)的时候将scroll位置以及对应的页面记录到redux里面就可以了。

3.在history.back的时候,判断redux里面是否有当前页面的值,如果有取出来

4.在 componentDidMount中判断是否有对应的scroll值,如果有,则 在setTimeout中调用pulload的moveTo方法滚动到对应位置

5.因为直接pullLoad到对应位置会先展示页面的头部在跳转到对应位置,先的很生硬,所以我再state中加了一个visibility:visible状态变量,滚动到对应位置后,200秒延迟将页面显示出来

 

 

### 实现 React 应用的页面自动化国际化 为了使 React 应用能够自动适应不同语言环境并提供相应的翻译,可以采用 `i18next` 结合 `react-i18next` 的方式来构建国际化功能。以下是具体方法: #### 安装依赖库 首先,在项目中安装必要的 npm 包: ```bash npm install i18next react-i18next ``` #### 初始化配置文件 创建个名为 `i18n.js` 或者类似的初始化脚本用于设置多语言支持。 ```javascript // src/i18n.js import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; const resources = { en: { translation: { "welcome": "Welcome" } }, ar: { translation: { "welcome": "مرحبا بك" } } }; i18n.use(initReactI18next) .init({ resources, lng: navigator.language || 'en', // 默认语言 fallbackLng: 'en', interpolation: { escapeValue: false }, // 不转义 HTML 字符串 direction: function(lngs) { // 动态调整文本方向 return ['ar'].includes(lngs[0]) ? 'rtl' : 'ltr'; } }); export default i18n; ``` 此部分代码定义了个简单的资源对象,其中包含了英文和阿拉伯文两种版本的欢迎消息,并设置了默认使用的语言以及当找不到指定语言时回退至英语的行为[^1]。 #### 使用组件内联翻译 通过导入 `useTranslation()` hook 来获取当上下文中可用的语言包数据,并将其应用于 JSX 中。 ```jsx // App.jsx import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; function App() { const { t } = useTranslation(); return ( <div> <h1>{t('welcome')}</h1> </div> ); } export default App; ``` 上述例子展示了如何利用钩子函数访问已加载好的翻译字符串,并直接嵌入到渲染逻辑里去显示给定键对应的值[^2]。 #### 切换语言的功能实现 为了让应用程序具备切换语言的能力,还需要编写相应的方法来进行更改操作。 ```javascript // utils/languageUtils.js import i18n from '../src/i18n'; const changeLanguage = async (lng) => { await i18n.changeLanguage(lng); }; ``` 最后步就是调用这个辅助工具中的异步函数完成实际的语言转换过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值