Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js 在计算的循环中返回一个getter将创建一个循环_Vue.js_Vuex - Fatal编程技术网

Vue.js 在计算的循环中返回一个getter将创建一个循环

Vue.js 在计算的循环中返回一个getter将创建一个循环,vue.js,vuex,Vue.js,Vuex,我在计算内存中调用存储中的一个操作来运行它,在返回getter之后,这将创建一个循环 HTML {{loadedProjects}} 计算 computed: { loadedProjects() { this.$store.dispatch("getProjects"); return this.$store.getters.loadedProjects; } } 商店 import Vuex from "vuex"; import axios

我在计算内存中调用存储中的一个操作来运行它,在返回getter之后,这将创建一个循环

HTML

{{loadedProjects}}
计算

computed: {
    loadedProjects() {
      this.$store.dispatch("getProjects");
      return this.$store.getters.loadedProjects;
    }
  }
商店

import Vuex from "vuex";
import axios from "axios";

const createStore = () => {
    return new Vuex.Store({
        state: {

            loadedProjects: []
        },
        mutations: {
            setProjects(state, projects) {
                state.loadedProjects = projects
            }

        },
        actions: {
            getProjects(vuexContext) {
                console.log("hello1")
                return axios.get("THE API URL")
                    .then(res => {
                        console.log("hello2")
                        vuexContext.commit("setProjects", res.data);
                    })
                    .catch(e => console.log(e));
            }

        },
        getters: {
              loadedProjects(state) {
                return state.loadedProjects;
              }
        }
    });
};

export default createStore;


我希望调用我的操作来填充我的状态,然后返回我的状态来呈现我的数据。

我更改了如下代码:

created: function () {
  this.$store.dispatch("getProjects")
},
computed: {
  loadedProjects() {
    return this.$store.getters.loadedProjects
  }
}

它正在工作,但我想知道,但我有这个问题,在计算机内部工作,而且我想知道这是否是最好的解决方案。任何帮助???

使用在计算属性内进行API调用的存储操作有什么意义。。。也许你想触发
loadedProjects
change。。。。computed属性不是异步的,因此在获得响应之前,返回行将以任何方式执行。。。您可以尝试使用插件,或者像您所做的那样使用对
创建的
钩子的调用,这是更好的方法,而且您不必使用计算属性,您只需在模板上
{{$store.getters.loadedProjects}
,计算属性不应该有副作用(例如,调用存储操作、更改数据等)。否则,触发的副作用可能会导致组件的重新呈现和计算属性的可能重新获取。因此,无限循环

计算变量不应该有副作用。@StevenB.你是什么意思?有没有相关参考?@StevenB.你是什么意思?那么,我该怎么做才能得到我所期望的?@LucaSpezzano您可以在
创建的
钩子中发送“getProjects”,非常感谢:)这样做会更好,就像我在前面的回答中所做的那样?是的,当然!