Data 的 getter 能够观察非反应性 localStorage,但不能用于计算?

Data's getters able to watch non-reactive localStorage, but not for computed?

我有一个部分在用户未通过身份验证时显示 Login 按钮(如 localStorage 中所示),否则将显示 username 和 'logout botton'。

当我将 authenticated 放在 data 块中时,代码有效。但是,如果我把它放在 computed 字段中,它总是显示 login

#template
          <router-link v-if="!authenticated" to="login">Log In</router-link>
          <template v-else>
            Logged in as {{username}}
            <button @click="logout">Log out</button>
          </template>
#script
    data: function() {
      return {
        // get authenticated() {  //this works
        //   return localStorage.getItem('authenticated');
        // },
      }
    },
    computed: function() {
      return {
        authenticated: function() {  //this does not work
          return localStorage.getItem('authenticated');
        }
      }
    },

Vue 无法观察到本地存储项的更改,因此 authenticated 计算的 属性 将永远 return 相同的值,因为 Vue 缓存了计算属性的值.

在这种情况下,您通常会使用一种方法:

methods: {
  authenticated() {
    return localStorage.getItem('authenticated')
  }
}

尽管您的 getter 也可以。