vue.js - Vuex 计算属性仅适用于 getter

标签 vue.js vue-component vuex

当我把它放在我的 Vue 组件中时......

// using store getter

computed: {
  authenticated() {
    return this.$store.getters.authenticated
  }
}

... 它有效。 authenticated 的值是响应式的,当 vuex 存储中的值为 true 时,计算属性返回 true

这应该可行……(根据文档,这将是正确的方法)

// using store state

computed: {
  authenticated() {
    return this.$store.state.authenticated
  }
}

...但是没有。计算属性始终为 false

它甚至对初始状态不起作用,所以我猜它与 Action 或突变无关。 vuex 存储在 stategetters (Firefox Vue DevTools) 中保存正确的值。

我的商店是这样的:

const state = {
    authenticated: authenticate.isAuthenticated(),
};

const getters = {
    authenticated () {
        return state.authenticated
    }
};

const mutations = {
    isAuthenticated (state, isAuthenticated) {
        state.authenticated = isAuthenticated
    }
};

因此,它适用于 store getter 但不适用于 store state。 Afaik 商店状态也应该是响应式(Reactive)的。

知道我可能做错了什么吗?

最佳答案

除了这个讨论之外,vuex 还提供了 mapGettersmapStatemapActionsmapMutations辅助函数。

对于 authenticated getter,您可以将其映射为:

import { mapGetters } from 'vuex

computed: {
    ...mapGetters({
        authenticated: 'authenticated'
    })
}

有助于保持您的代码简洁明了,imo。

关于vue.js - Vuex 计算属性仅适用于 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48752801/

相关文章:

authentication - VueJS/Vuex App - 验证用于身份验证的 JWT token

vue.js - 在 Vue 3 + TypeScript + Options API 中使用 refs

javascript - 按需使用 Vue 组件 - [Vue warn] : Cannot find element

vue.js - Vue js v-model 不同的复选框

javascript - 如何在 vue.js 2 上使用 ajax 上传图片?

ruby-on-rails - Vue.JS 和 Rails-UJS/Jquery-UJS 冲突 - Vuex 突变不起作用

javascript - 使用客户端路由进行 Node 身份验证

vue.js - VueJS 添加到每个组件的生命周期钩子(Hook)

javascript - 视觉 : Components/templates as props

vue.js - Vuex 嵌套对象