Vuex store state:如何将函数与变量混合以单次重置状态值

Vuex store state : how to mix the function with variables for reseting state values at single shot

我有一个 Vuex Store,我需要根据应用程序中的一些更改重置变量,所以我正在使用类似的东西,一切都按预期工作:

const getDefaultState = () => {
    return {
        showModal: false,
        nodeCounter:0,
        nodeInfo: [],
    }
}

export const state = () => getDefaultState()

export const mutations = {
  resetState (state) {
    // Reset all state variables to its default value for next node
    Object.assign(state, getDefaultState())
  },
}

但是,根据新要求,我不希望重置 nodeCounter 并希望它具有增量值但 reset 所有其他值,所以我想做类似的事情这个:

const getDefaultState = () => {
    return {
        showModal: false,
        nodeInfo: [],
    }
}

export const state = () => {
    nodeCounter:0,
    getDefaultState()
}

所以我所有的其他值都是 resetnodeCounter 只会在我刷新应用程序时重置。但是我无法做到这一点。

谁能告诉我如何重置一些 state 变量而不重置其中的一些变量?我不想一个一个地重置状态变量,所以我使用 function 方法,如此处的一些答案中所述。

我会尝试保存 nodeCounter 的状态(你想保留),然后在你将状态设置为默认值后设置它。像这样:

const getDefaultState = () => {
    return {
        showModal: false,
        nodeCounter:0,
        nodeInfo: [],
    }
}

export const state = () => getDefaultState()

export const mutations = {
  resetState (state) {
    // Reset all state variables to its default value for next node
    const tmpNodeCounter = state.nodeCounter;
    state = {...getDefaultState(),nodeCounter: tmpNodeCounter};
  },
}

如果您只想重置具有突变的状态中的 某些值 ,则无需在 resetState 突变中包含所有状态变量。您可以为每次都必须重置的变量定义另一个对象。这是我的 Nuxt 商店文件 change.js:

const getDefaultState =  {
  showModal: false,
  nodeCounter:0,
  nodeInfo: [],
}

const alwaysReset = {
  showModal: false,
  nodeInfo: [],
}

export const state = () => (getDefaultState);

export const mutations = {
  resetState (state) {
    // Reset state variables that must be reset each time and not all state
    Object.assign(state, alwaysReset);
  },

  increment (state) {
    console.log(state.nodeCounter);
    state.nodeCounter++;
  },

  pushArr (state) {
    console.log(state.nodeInfo);
    state.nodeInfo.push("item");
  }
}

alwaysReset 对象仅包含您每次要重置的变量。例如,创建了其他突变以使用此 Nuxt 页面测试我的答案:

<template>
  <v-container fluid>
    <v-row>
      <v-col>
        <v-card
          class="pa-2"
          outlined
          tile
        >
          <div>this is a page</div>
          <v-btn @click = "changeState">click</v-btn>
          <v-btn @click = "incrementState">increment</v-btn>
          <v-btn @click = "arrayState">push</v-btn>
        </v-card>
      </v-col>
    </v-row>
  </v-container>
</template>

<script>
  export default {
    methods: {
      changeState: function() {
        this.$store.commit('change/resetState');
      },

      incrementState: function() {
        this.$store.commit('change/increment');
      },

      arrayState: function() {
        this.$store.commit('change/pushArr');
      }
    }
  }
</script>

这里我创建了 3 个按钮。其中之一重置指定的变量。另一个增加 nodeCounter 以查看重置此状态 不会 改变。最后,第三个将项目推送到 nodeInfo 变量以查看此状态将被重置 每次 次。