使用 vuex getter 重新渲染组件

Posted

技术标签:

【中文标题】使用 vuex getter 重新渲染组件【英文标题】:Re-render a component using vuex getters 【发布时间】:2021-03-28 23:48:15 【问题描述】:

我试图强制一个组件重新渲染。在阅读了这个之后,我决定使用 key 来强制重新渲染。我的键是来自商店的值,然后我提交了一个突变,它增加了键的值。但是我的组件不会重新渲染。我做错了什么?

我的组件调用:

<div class="firstTab" v-else-if="activeFormStep === 1 && !isLoading">
   <AgenciesSelectionStep
             ref="agenciesSelectionStep"
            :key="agenciesSelectionStepKey"
    ></AgenciesSelectionStep>
</div>

吸气剂:

computed: 
            ...mapGetters(['modificationFormType', 'globalLoaderUpMessage', 'globalLoaderDownMessage', 'agenciesSelectionStepKey']),
        

存储状态:

const state = 
    agenciesSelectionStepKey: 20,
;
const getters = 
    agenciesSelectionStepKey: state => state.agenciesSelectionStepKey,
;

存储突变;

[CHANGE_COMPONENT_KEY]: (state, payload) => 
        state[payload.componentKeyName] += 1;

【问题讨论】:

【参考方案1】:

这是一个很长的镜头,但您可以尝试一下。我有一个类似的问题。 您是从操作调用突变还是直接从组件调用突变?

const state = 
    SelectionStepKeys: 
        agenciesSelectionStepKey: 20
    ,
;

const getters = 
    getSelectionStepKey: state => (key) => 
        return state.SelectionStepKeys[key]
    
;

变异

IncrementKey: (state, key) => 
    state.SelectionStepKeys[key] += 1;
    state.SelectionStepKeys = ...state.SelectionStepKeys
 

【讨论】:

以上是关于使用 vuex getter 重新渲染组件的主要内容,如果未能解决你的问题,请参考以下文章

Vuex 全局状态更改不会触发 Nuxt 中 v-for 循环中的重新渲染组件

使用 Lodash.remove 通过 Vuex 突变更改状态不会触发我的 Vue 组件中的反应式重新渲染

从持久存储重新水化后,Vuex getter 不会更新

状态渲染前的 Vue.js/vuex getters 错误

vuex使用前与使用后的写法---getters(获取事件)

vuex使用前与使用后的写法---getters(获取事件)