【问题标题】:How to use Vuex 4 state data inside Vue 3 component as payload for another dispatch?如何在 Vue 3 组件中使用 Vuex 4 状态数据作为另一个调度的有效负载?
【发布时间】:2021-05-23 20:32:15
【问题描述】:

我正在使用 Vue 3 组合 API 和 Vuex 4 中的 useStore 钩子

这就是我从 setup() 中的 vuex 存储中获取数据(id)的方式

    setup () {
                const store = useStore()    
                const allIds = computed(() => store.state.ids)               
    
            function printIds () {
                console.log(allIds.value)
               }
             //...
         }

问题是我无法使用 allIds 数组,因为它包含在代理中。这就是我在 console.log(allIds.value) 上得到的 -

当我在模板中使用此数组时,它工作正常,但我想将此数据用作有效负载,以使用数组中的 1 个 id 在组件内进行另一个动作调度。我怎样才能做到这一点?我发现的所有示例都是在模板中使用商店数据。

谢谢。

【问题讨论】:

    标签: vue.js vuex vuejs3 vue-composition-api vuex4


    【解决方案1】:

    代理不会阻止您将数据用作有效负载,您只需使用.value 属性并从那里正确访问数据。

    allIds 变量是一个对象,其pads 属性中有一个数组。所以要传递数组中的第一项,例如:

    const store = useStore()    
    const allIds = computed(() => store.state.ids)               
        
    store.dispatch('actionName', allIds.value.pads[0]);
    

    商店

    actions: {
      actionName({ commit }, payload) {
        console.log(payload);
      }
    }
    

    【讨论】:

    • 这适用于 actionName。有没有一种方法可以在组件本身中使用与我想在那里使用 id 相同的方法?在组件内的任何位置(如 onMounted)记录 allIds.value.pads[0] 会引发错误。
    • 它应该可以在setup 的任何地方工作,包括onMounted。也许检查你的onMounted 调用的语法并确保它在计算之后。如果您无法使其正常工作,请向我显示代码和错误。
    • 代码:snipboard.io/4F0SBP.jpg 我第一次在同一个组件中调度一个动作,将 padIds 添加到存储然后读取它。你能看看sn-p并提出建议吗?感谢您的帮助。
    • 我猜测添加 id 的操作是异步的。因此,当组件安装时,id 还没有准备好。 onMounted 中的 id 需要做什么?
    • 是的,该操作是异步的。使用这样的手表有效:snipboard.io/lOSFhc.jpg 那么有没有更好的方法来实现这一点? 1. 将异步数据添加到存储 2. 从存储中读取该数据 3. 调用另一个调度
    猜你喜欢
    • 2021-06-24
    • 2021-10-24
    • 2021-06-22
    • 2018-12-03
    • 2021-05-12
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多