javascript Pinia存储状态改变时,Vue模板未更新

li9yvcax  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(709)

我正在将一个Vue 2应用程序迁移到Vue 3。到目前为止,它已经足够好了,除了模板没有根据Pinia状态更新。我已经看了其他与此相关的SO问题,但我不能解决这个问题。
下面是我的组件(父组件和子组件)和存储-注意,我使用的是选项API

// Parent
<template>
  <div class="wrapper">
    <ActionButtonGroup />
  </div>
</template>

<script>
import { useActionStore } from '@/stores/ActionStore';
import ActionButtonGroup from './components/ActionButtonGroup/main.vue';
export default {
  name: 'ActionsParent'
  components: {
    ActionButtonGroup,
  },
  created() {
    this.loadActions();
  },
  methods: {
    loadActions() {
      useActionStore().loadActions();
    },
  }
}
// Child
<template>
  <div class="action-buttons d--f ai--c">
      <Spinner class="ml-3" v-if="loading" />
  </div>
</template>

<script>
import { mapState } from 'pinia';
import { useActionStore } from '@/stores/ActionStore';
import { Spinner } from '@/components/index';

export default {
  name: 'ActionButtonGroup',
  components: {
    Spinner,
  },
  computed: {
    ...mapState(useActionStore, ['loading']),
  }
}
</script>
// Store
import { ActionApi } from '@/api/index';
export const useActionStore = defineStore('Action', {
  state: () => {
    return {
      loading: false,
    };
  },
  actions: {
    async loadActions() {
      this.loading = true;
      await this.fetchActions();
      this.loading = false;
    },
    async fetchActions(id) {
      const actions = await ActionApi.fetchActions();
      return actions;
    },
  }
}

我也尝试过在child中使用setup函数,但这并不能解决问题:

setup() {
    const store = useActionStore();
    const loading  = computed(() => store.loading);
    return {
      loading
    }
  },
w9apscun

w9apscun1#

遗憾的是,我不能对此发表评论,所以我的回应必须是一个答案。
我不认为这个问题与Pinia有关。我检查并重新创建了它,一切正常。我建议检查其他方面,比如Vue示例和被调用的函数本身。尝试慢慢地将内容删除到最基本的部分,看看它是否能工作。您还需要确认在调用“等待”函数“fetchActions”后,它实际上完成了,并且状态更新了。
如果状态正在更新,那么您知道它必须与Vue示例相关,然后您可以尝试在另一个Vue示例中重建,以帮助缩小问题范围。
希望这能有所帮助!

相关问题