场景:
小程序内webview加载web页面,web中做了登录态的拦截器,当登录态失效的情况下会自动走登录(web的登录,不是小程序的)的逻辑,登录成功后会通过locaiton.reload刷新页面,重新获取数据。
相关技术栈: web项目使用React 16.13;小程序是用uni-app相关栈;
设备: 手上测试了ios和几个Android机型都是不行,如果需要相关系统版本我可以提供
// 登录
postLogin(userInfo)
.then(() => {
try {
loginFlag = false;
// 登录成功后刷新
history.push('/login-success'); // 临时方案
// location.reload(); // 无效
} catch (err) {
console.log('exec error ', err);
}
})
.catch((err) => {
loginFlag = false;
console.log('login error', err);
});
异常:
页面并没有刷新。
chrome中测试时是正常的,但是在小程序的webview中登录逻辑都走完了,并没有刷新页面。根据log确认,相关代码是执行了的。经过测试,只有在第一个页面会这样,也就是说history.length > 1的时候是可以刷新的,只有在第一个页面才会这样,只要路由有过变化执行reload就是有效的。在其他的问题里,有看到类似的问题,好像是小程序的webview内的什么优化策略。
目前解决方式:
因为项目比较简单,没有复杂的数据结构,并没有使用状态管理库,所以做了个login-success的页面。登录成功后会直接跳转到这个页面,在login-success再goback回去,让页面重新渲染达成目的。
问题:
因为在官方相关中没有看到相关内容,想知道具体原因或者机制。找到更合适的解决方案。