当前位置: 首页 > 知识库问答 >
问题:

Vuex getter复制数组值

宣煜
2023-03-14

我有一个简单的课程生成器,允许教师为各种类别进行选择,这些选择ID被收集并分组在一起,我希望在最后将它们全部作为课程计划返回。

然而,我有一个奇怪的问题,我无法解决。我的Vuex存储正确显示选择,但是我的getter复制了我的所有数组。

选择完成后,我的Vuex商店通过Vue.js开发工具插件显示了这样的内容:

lesson_store:Object
    lesson:Object
        selected_event:1
        selected_exploration:Array[1]
            0:1
        selected_extensions:Array[1]
            0:1
        selected_goals:Array[1]
            0:54
        selected_lexis:Array[1]
            0:2

存储。js状态和获取者:

const state = {
    lesson: {
        selected_event: '',
        selected_exploration: [],
        selected_extensions: [],
        selected_goals: [],
        selected_lexis: [],
    }
};

getSelections(state) {
    console.log('GETTER SELECTIONS', state.lesson);
    return state.lesson
}

我从课程调用getSelections。vue文件:


<template><button @click="saveLesson">Save</button></template>


methods: {
    saveLesson () {
        console.log('GET RETURN OF SELECTIONS',this.$store.getters["getSelections"]);
    },
}

现在,我的控制台输出是:

lesson_store:Object
    lesson:Object
        selected_event:1
        selected_exploration:Array[2]
            0:1
            0:1
        selected_extensions:Array[2]
            0:1
            0:1
        selected_goals:Array[2]
            0:54
            0:54
        selected_lexis:Array[2]
            0:2
            0:2

问题是,我的其他获得者都不是这样的。这个getter是超基本的。当我在Vue中签出store和getSelectionsgetter时。js dev tools这些值是正确的,没有重复项。

如果您能提供任何建议或指导,我们将不胜感激。

更新::::::

Lesson_Store的动作和突变

// create mutations
const mutations = {
    setSelectedEvent(state, payload) {
        // state.lesson.selected_event = payload

        if (state.lesson.selected_event === payload) {

            state.lesson.selected_event = '';
        } else {
            state.lesson.selected_event = payload
        }

    },

    setSelectedReading(state, payload) {

        if (state.lesson.selected_reading === payload) {
            state.lesson.selected_reading = '';
        } else {
            state.lesson.selected_reading = payload
        }

    },

    setSelectedLexis(state, payload) {

        // if event is already in array, then remove it with filter
        // otherwise push it to the array
        if (state.lesson.selected_lexis.includes(payload)) {
            state.lesson.selected_lexis = state.lesson.selected_lexis.filter(function (item) {
                return item !== payload;
            });
        } else {
            state.lesson.selected_lexis.push(payload);
        }

        // state.lesson.selected_lexis = payload
    },

    setSelectedExplorations(state, payload) {

        // if event is already in array, then remove it with filter
        // otherwise push it to the array
        if (state.lesson.selected_exploration.includes(payload)) {
            state.lesson.selected_exploration = state.lesson.selected_exploration.filter(function (item) {
                return item !== payload;
            });
        } else {
            state.lesson.selected_exploration.push(payload);
        }

        // state.lesson.selected_lexis = payload
    },

    setSelectedQuestions(state, payload) {

        // if event is already in array, then remove it with filter
        // otherwise push it to the array
        if (state.lesson.selected_questions.includes(payload)) {
            state.lesson.selected_questions = state.lesson.selected_questions.filter(function (item) {
                return item !== payload;
            });
        } else {
            state.lesson.selected_questions.push(payload);
        }

        // state.lesson.selected_lexis = payload
    },

    setSelectedPerformances(state, payload) {

        // if event is already in array, then remove it with filter
        // otherwise push it to the array
        if (state.lesson.selected_performances.includes(payload)) {
            state.lesson.selected_performances = state.lesson.selected_performances.filter(function (item) {
                return item !== payload;
            });
        } else {
            state.lesson.selected_performances.push(payload);
        }

    },

    setSelectedExtensions(state, payload) {

        // if event is already in array, then remove it with filter
        // otherwise push it to the array
        if (state.lesson.selected_extensions.includes(payload)) {
            state.lesson.selected_extensions = state.lesson.selected_extensions.filter(function (item) {
                return item !== payload;
            });
        } else {
            state.lesson.html" target="_blank">selected_extensions.push(payload);
        }

    },

    setSelectedGoals(state, payload) {

        // if event is already in array, then remove it with filter
        // otherwise push it to the array
        if (state.lesson.selected_goals.includes(payload)) {
            state.lesson.selected_goals = state.lesson.selected_goals.filter(function (item) {
                return item !== payload;
            });
        } else {
            state.lesson.selected_goals.push(payload);
        }

    },


};

// create actions
const actions = {
    setSelectedEvent({commit}, payload) {
        commit('setSelectedEvent', payload);
    },

    setSelectedReading({commit}, payload) {
        commit('setSelectedReading', payload);
    },

    setSelectedLexis({commit}, payload) {
        commit('setSelectedLexis', payload);
    },

    setSelectedExplorations({commit}, payload) {
        commit('setSelectedExplorations', payload);
    },

    setSelectedQuestions({commit}, payload) {
        commit('setSelectedQuestions', payload);
    },

    setSelectedPerformances({commit}, payload) {
        commit('setSelectedPerformances', payload);
    },

    setSelectedExtensions({commit}, payload) {
        commit('setSelectedExtensions', payload);
    },

    setSelectedGoals({commit}, payload) {
        commit('setSelectedGoals', payload);
    },
};

由于我的vuejs开发工具正确显示所有选择id,因此所有这些工具似乎都正常工作。

共有1个答案

谭曦
2023-03-14

对于任何有类似问题的人,如果您的开发工具存储与您的实际存储值输出不匹配,这可能是由于您的代码没有通过操作和突变方法正式更新存储值。

如果直接更新此存储值而不执行任何操作和更改,则存储中的值将发生更改,但是vuejs开发工具将不会检测到这些更新的值,并且实际存储数据和开发工具数据值将不匹配。

 类似资料:
  • 问题内容: 我有一个a不断更新的数组。比方说。我需要制作一个完全相同的副本a并称之为b。如果a要改成,b应该还是。做这个的最好方式是什么?我尝试了像这样的循环: 但这似乎无法正常工作。请不要使用深层复制等高级术语,因为我不知道这意味着什么。 问题答案: 你可以尝试使用System.arraycopy()

  • 主要内容:使用 copyOf() 方法和 copyOfRange() 方法,使用 arraycopy() 方法,使用 clone() 方法所谓复制数组,是指将一个数组中的元素在另一个数组中进行复制。本文主要介绍关于 Java 里面的数组复制(拷贝)的几种方式和用法。 在 Java 中实现数组复制分别有以下 4 种方法: Arrays 类的 copyOf() 方法 Arrays 类的 copyOfRange() 方法 System 类的 arraycopy() 方法 Object 类的 clone

  • 问题内容: 将JavaScript中的数组复制到另一个数组时: 我意识到这是指与相同的数组,而不是新的独立数组。如何复制数组以获取两个独立的数组? 问题答案: 用这个: 基本上,该操作会克隆数组并返回对新数组的引用。 另请注意: 对于引用,字符串和数字(​​而不是实际对象),将 对象引用复制到新数组中。 原始数组和新数组都引用同一对象。如果引用的对象发生更改,则更改对新数组和原始数组均可见。 字符

  • 问题内容: 我想创建一个1D NumPy数组,该数组由另一个1D数组的1000个背对背重复组成,而无需将数据复制1000次。 可能吗? 如果有帮助,我打算将两个数组都视为不可变的。 问题答案: 你做不到 NumPy数组在每个维度上必须具有一致的步幅,而您的步幅在大多数情况下需要采用一种方式,但有时会向后跳。 您可以获得的最接近的结果是一个1000行的2D数组,其中的每一行都是您第一个数组的视图,或

  • 问题内容: 我试图制作一个数组的独立副本,但无法获得一个。出于效率原因,我无法使用for循环将其逐个整数复制。还有其他办法吗?这是我的代码: 问题答案: 看方法。喜欢,