uni-app uni-id-pages 登录成功/退出登录 后 store.hasLogin状态更新过慢

uni-app uni-id-pages 登录成功/退出登录 后 store.hasLogin状态更新过慢

开发环境 版本号 项目创建方式
Windows 10 HBuilderX
产品分类:uniapp/小程序/微信

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:windows 10

HBuilderX类型:正式

HBuilderX版本号:3.94

第三方开发者工具版本号:1.06

基础库版本号:3.12

项目创建方式:HBuilderX

### 示例代码:

```vue
<script setup>  
import { onShow, onLoad, onUnload, onNavigationBarButtonTap } from '[@dcloudio](/user/dcloudio)/uni-app'  
import { mutations, store } from "@/uni_modules/uni-id-pages/common/store"  
onLoad(()=>{  
    uni.$on("uni-id-pages-login-success", onLogin)  
    uni.$on("uni-id-pages-logout", onLogout)  
})  
onUnload(()=>{  
    uni.$off("uni-id-pages-login-success", onLogin)  
    uni.$off("uni-id-pages-logout", onLogout)  
})  
function onLogin(info){  
    console.log("login login", store.hasLogin, store.useInfo)  
}  
function onLogout(info){  
    console.log("logout logout", store.hasLogin, store.useInfo)  
}  
</script>

打印出来结果如下:

logout logout true undefined  
login login false undefined

操作步骤:

按照代码示例运行,安装 uni-id-pages插件,进行一次登录登出操作。

预期结果:

期待:“uni-id-pages-login-success”“uni-id-pages-logout” 的回调中,store的状态是正确的。

或者说,我应该怎么样得到当前用户的正确登录状态和信息。

实际结果:

打印出来结果如下:

logout logout true undefined  
login login false undefined

bug描述:

在页面中监听 “uni-id-pages-login-success”“uni-id-pages-logout”消息,并试图从 uni-id-pages 的 store 类中,读取当前的登录状态和用户信息,但是读到的状态却是错误的,也获取不到 userInfo。


更多关于uni-app uni-id-pages 登录成功/退出登录 后 store.hasLogin状态更新过慢的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app uni-id-pages 登录成功/退出登录 后 store.hasLogin状态更新过慢的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在使用 uni-appuni-id-pages 进行登录和退出登录操作时,store.hasLogin 状态更新过慢的问题可能是由于以下几个原因导致的:

1. 异步操作未正确处理

登录和退出登录通常是异步操作,如果你在更新 store.hasLogin 状态时没有正确处理异步操作,可能会导致状态更新过慢。

解决方案: 确保在登录和退出登录的异步操作完成后再更新 store.hasLogin 状态。

// 登录示例
uniCloud.callFunction({
  name: 'uni-id-login',
  data: {
    username: 'yourUsername',
    password: 'yourPassword'
  },
  success: (res) => {
    if (res.result.code === 0) {
      // 登录成功,更新 store.hasLogin 状态
      this.$store.commit('setHasLogin', true);
    } else {
      // 处理登录失败
      console.error('登录失败:', res.result.msg);
    }
  },
  fail: (err) => {
    console.error('登录请求失败:', err);
  }
});

// 退出登录示例
uniCloud.callFunction({
  name: 'uni-id-logout',
  success: (res) => {
    if (res.result.code === 0) {
      // 退出登录成功,更新 store.hasLogin 状态
      this.$store.commit('setHasLogin', false);
    } else {
      // 处理退出登录失败
      console.error('退出登录失败:', res.result.msg);
    }
  },
  fail: (err) => {
    console.error('退出登录请求失败:', err);
  }
});

2. Vuex Store 更新不及时

如果 store.hasLogin 是通过 Vuex 管理的,确保 Vuex 的 mutationaction 正确触发并更新状态。

解决方案: 在 Vuex store 中定义一个 mutation 来更新 hasLogin 状态。

// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    hasLogin: false
  },
  mutations: {
    setHasLogin(state, value) {
      state.hasLogin = value;
    }
  },
  actions: {
    updateHasLogin({ commit }, value) {
      commit('setHasLogin', value);
    }
  }
});

然后在组件中使用 this.$store.commit('setHasLogin', true)this.$store.dispatch('updateHasLogin', true) 来更新状态。

3. 页面渲染延迟

有时页面渲染可能会有延迟,导致 store.hasLogin 状态的更新没有立即反映在页面上。

解决方案: 可以使用 watch 监听 store.hasLogin 的变化,并在变化时强制更新页面。

// 在组件中
export default {
  computed: {
    hasLogin() {
      return this.$store.state.hasLogin;
    }
  },
  watch: {
    hasLogin(newVal) {
      // 强制更新页面或执行其他操作
      this.$forceUpdate();
    }
  }
};

4. Uni-ID 插件问题

如果问题依然存在,可能是 uni-id-pages 插件本身的问题。可以检查插件版本,确保使用的是最新版本,或者查看官方文档和社区是否有相关问题的解决方案。

5. 调试和日志

在开发和调试过程中,可以通过添加日志来跟踪 store.hasLogin 状态的更新过程,帮助定位问题。

console.log('当前 hasLogin 状态:', this.$store.state.hasLogin);
回到顶部