如何使用 bool return 添加 vuex 动作?

How to add vuex action with bool return?

我正在尝试在 vuex 中添加一个简单的通用操作,它 return 是一个布尔值,但它看起来 return 不是我需要的。

我的子组件调用:

<ArrowDownIcon
    class="campaigns-grid__header-direction"
    v-if="isOrderedBy(column.id)"
    class="{'campaigns-grid__header-direction--asc': order.isDescending}"
/>

我在根组件上的导入和 vuex 调用:

import { createNamespacedHelpers } from 'vuex'
const { mapActions } = createNamespacedHelpers('campaigns')
    
export default {
    
    methods: {
        ...mapActions(['isOrderedBy', 'orderBy'])
    }
}

我的 vuex 模块('campaigns'):

export default {
    namespaced: true,

    actions: {
        isOrderedBy (column) {
            if (column === 'test') {
                return true
            }

            return false
        },
    }
}

action returns .

因此,如果您想从操作中获得 return 价值,您可以这样做

if (await isOrderedBy()) {
   console.log('isOrderBy returns true')
} else {
   console.log('isOrderBy returns false')
}

尽管这可能有效,但您不应该将 Vuex 操作用于 return 布尔值,因为 Vuex 操作 return 承诺。使用vuex的理想流程是:

-> dispatch Action -> Action makes Network calls -> Actions Commits Data to State -> Getters Pull data from State

要解决此问题,请使用 Mixins,因为您正在尝试使 isOrderedBy(..) 函数在应用程序范围内可用,并且您还希望它 return 一个布尔值,具体取决于提供的参数。

如果您还没有 mixin 文件夹,请创建一个,并添加一个 orderMixin.js 文件:该文件应包含 isOrderedBy() 函数作为方法。

export const orderMixin = {
  methods: {
    isOrderedBy(column) {
      return column === 'test'
    }
  } 
}

然后在您的组件中导入 mixin 并使用它。

<template>
...
<ArrowDownIcon
    class="campaigns-grid__header-direction"
    v-if="isOrderedBy(column.id)"
    class="{'campaigns-grid__header-direction--asc': order.isDescending}"
/>
...
</template>

<script>
import { orderMixin } from 'path-to-mixins/orderMixin'

export default {
  mixins: [orderMixin],
  ...
}
</script>