如何防止网页刷新后页面数据丢失或者状态重置

我的业务场景

主页后点击呼叫进入会话页====>waiting状态
对方接听====>修改为conversation状态
通话中在会话页面刷新====>保持conversation状态
路由到主页后再次点击呼叫进入会话页====>waiting状态
对方接听====>修改为conversation状态

避免刷新后数据丢失通常有几种方式避免:

localStorage

将数据或者状态存储在localStorage中,初始化时默认从localStorage读取,状态或数据改变时再次存储。

路由参数

使用React-Router将参数传递给路由组件

我的业务场景不适用以上两种方式,如果各位有跟我差不多的场景可以采用以下方式解决:

URL参数

通过history.push的方式将数据拼接在当前url后,默认从params中读取。

 const history = useHistory();
 const params = useParams();
 
 //解析参数
 const infos = atob(params.infos);
 const infoObj = JSON.parse(infos);
 
// 状态默认从params中读取
 const [sessionState, setSessionState] = useState(
    infoObj.sessionState || 'waiting',
  ); //waiting:等待中, conversation:会话中

// 改变状态
infoObj.sessionState = 'conversation';
// 将状态拼接在url后(刷新则会从params中读取)  
history.push(`/conversation/${btoa(JSON.stringify(infoObj))}`);

Query参数

const history = useHistory();
const location = useLocation();

// 状态默认从query中读取
 const [sessionState, setSessionState] = useState(
    location.query.sessionState || 'waiting',
  ); //waiting:等待中, conversation:会话中

// 改变状态
history.push({ 
        pathname: '/conversation/',
        query: { 
          sessionState : 'conversation',
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值