javascript - Vue.js : Element is shown for a moment despite of conditional rendering

标签 javascript vuejs2 conditional-statements conditional-rendering

我有一个带有切换菜单按钮和登录按钮的导航。

当用户未被授权时,他只能看到登录按钮。当用户登录时,该按钮消失,他/她可以看到一个汉堡包按钮,用于切换用户的菜单。

我有一个基于属性 isLoaded 的条件,它可以是 false 或 true 取决于 API 响应(是否加载配置文件数据,这在登录后发生)。它工作正常,但当我重新加载页面并在登录过程后重定向到主页后,登录按钮会出现片刻。我想知道如何避免这种情况。

我怀疑这个按钮是在应用程序等待 API 响应时显示的,一旦它看到 isLoaded: true,它就会在检查条件后隐藏按钮。

这是我的代码:

<v-toolbar app fixed dark color="light-blue lighten-2">
  <user-nav-button v-if="getProfile.isLoaded"
                   @toggle-drawer="$refs.drawer.drawer = !$refs.drawer.drawer" />
  <v-toolbar-title v-if="getProfile.isLoaded">
    <router-link :to="{ name: '/' }"
                 class="white--text" >
      APP
    </router-link>
  </v-toolbar-title>
  <v-spacer></v-spacer>
  <router-link :to="{ name: 'login' }"
               class="sign-in-button"
               v-if="!getProfile.isLoaded">
    SIGNIN
  </router-link>
</v-toolbar>
<profile-sidebar v-if="getProfile.isLoaded"
                 ref="drawer" />

<script>
export default {
data() {
 return {
  drawer: '',
 };
},
components: {
  UserNavButton,
  ProfileSidebar,
  MainFooter,
 },
 created() {
  this.loadProfile();
 },
 computed: {
  ...mapGetters(['getProfile']),
 },
 methods: {
  ...mapActions(['loadProfile']),
 },
};
<script>

我的商店:

export default {
 state: {
 profile: {
  isLoaded: false,
  data: [],
  },
},
actions: {
 loadProfile({ commit }) {
  if (config.token !== '') {
    http
      .post('api')
      .then(({ data }) => {
        commit('SET_PROFILE', data);
      });
  }
 },
},
mutations: {
 SET_PROFILE(state, data) {
  state.profile = {
    isLoaded: true,
    data,
  };
 },
},
getters: {
 getProfile(state) {
  return state.profile;
  },
 },
};

最佳答案

您的按钮完全按照您的指示进行操作。

  <router-link :to="{ name: 'login' }"
               class="sign-in-button"
               v-if="!getProfile.isLoaded">

getProfile.isLoaded 为 false 时,您将显示它。这也是您的默认状态。

我个人会将 isloaded 与配置文件数据分离。使用 loadingfinished 数据属性(或 $store 属性)

您真正想要的是仅在满足两个条件时才显示该按钮:

  1. 加载完成

  2. 您知道用户未登录。

关于javascript - Vue.js : Element is shown for a moment despite of conditional rendering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52849877/

相关文章:

javascript - JavaScript 中的闭包和 "this"关键字问题

javascript - HTML 中的六边形链接

javascript - 手机间隙 : Dynamically show & hide status bar (iOS Xcode)

vuejs2 - Vuetify 有条件的深色主题

python - csv列没有过滤,没有错误

python - 有条件地将列表中的项目 append 到多个文档中

javascript - 努力使用正则表达式来匹配一个字符中的两个,而不是三个

javascript - 如何重构此 Vue Js 代码以避免使用本地存储?

javascript - 如何使用 Vue.js 为数组(数据)中的所有对象添加属性?

google-maps-api-3 - 如果 marker.setMap == null 做某事