VueJS/VueX 超出最大调用堆栈大小

Posted

技术标签:

【中文标题】VueJS/VueX 超出最大调用堆栈大小【英文标题】:VueJS/VueX Maximum call stack size exceeded 【发布时间】:2018-05-17 17:28:21 【问题描述】:

我目前正在做一个 Vue 项目,我正在使用 Vuex 进行状态管理。但是,当我在我的组件中将以下两个操作与 mapactions 和 mapgetters 绑定时,我的控制台中出现 Maximum call stack size exceeded 错误。

我不知道我做错了什么。

import Vue from 'vue'
import Vuex from 'vuex'
import service from "../services/statisticsService"
import moment from 'moment'

Vue.use(Vuex)

const state = 
    customersAndServicesOverTime:[],
    counters:

const actions = 
    actGetAllData(context)
        context.dispatch('actGetCustomersAndServicesOverTime')
        context.dispatch('actGetCounters')
    ,

    actGetCustomersAndServicesOverTime(context)
        service.getCustomerAndServicesOverTime(context.getters.getJWT)
            .then(response =>
                context.commit('mutCustomersAndServicesOverTime', response.body)
            )
    ,
    actGetCounters(context)
        service.getCounts(context.getters.getJWT)
            .then(response =>
                context.commit('mutCounts', response.body)
            )
    

const mutations = 
    mutCustomersAndServicesOverTime(state,payload)
        state.customersAndServicesOverTime =
            labels:payload.map(x => moment(x.created).format("DD-MM-YYYY")),
            datasets:[
                data:payload.map(x => x.customersCount), 
                backgroundColor:"rgba(52, 73, 94,0.5)", 
                label:"customers",lineTension:0
            ,
                data:payload.map(x => x.servicesCount),
                backgroundColor:"rgba(230, 126, 34,0.5)", 
                label:"services",lineTension:0
            ]
    ,
    mutCounts(state,payload)
        state.counters = payload
    ,

const getters = 
    getCustomersAndServicesOverTime:state=>state.customersAndServicesOverTime,
    getCounts:state=>state.counters,


export default 
    state,
    getters,
    actions,
    mutations

在我的服务中,我声明了两个与我的 API 连接的函数。

import Vue from 'vue'
import VueResource from 'vue-resource'
import CONFIG from "../config"

export default 
    getCounts(jwt) 
        return Vue.http.get(CONFIG.API + "statistics/counts", 
            headers: 
                'Content-Type': 'application/json'
                ,'Authorization': 'Bearer ' + jwt
            
        )
    ,
    getCustomerAndServicesOverTime(jwt) 
        return Vue.http.get(CONFIG.API + "statistics/customersandservicesovertime", 
            headers: 
                'Content-Type': 'application/json'
                ,'Authorization': 'Bearer ' + jwt
            
        )
    

【问题讨论】:

您更有可能是从内部调用某些东西。因此,无限循环将导致该消息。检查您的代码是否存在无限循环、参考 这是我到处读到的。但是找不到在哪里...我已经重写了商店中的所有内容... 点击红色的文件,可能会显示错误的源代码行 会不会是我从 .map 中得到这个错误? 这不是 vuex 问题...在我的吸气剂中,我需要一个深拷贝...感谢您的帮助 【参考方案1】:

这不是 vuex 问题。我使用 vue-chartjs,并没有硬拷贝我的对象实例,而是将其用作参考。这会导致最大调用堆栈大小超出错误。

https://github.com/apertureless/vue-chartjs/issues/197

【讨论】:

以上是关于VueJS/VueX 超出最大调用堆栈大小的主要内容,如果未能解决你的问题,请参考以下文章

Angular 11最大调用堆栈大小超出错误

RangeError:超出最大调用堆栈大小

超出最大调用堆栈大小 - 没有明显的递归

nrwl - ng generate 给出超出最大调用堆栈大小

Nuxt 超出最大调用堆栈大小

递归过多/超出最大调用堆栈大小(Jquery 1.9.1)