vue.js - 当 vuex 外部没有发生突变时,错误“Vuex 不会在突变处理程序之外改变 vuex 存储状态”
问题描述
我在 Vuex 中定义了一个突变,如下所示:
setError(state, error) {
state.error = error
setTimeout(() => {
state.error = null
}, 5000)
},
我这样称呼它:
...
catch (error) {
this.$store.commit('setError', error.response.data.error.message)
}
...
当超时期限到期时,我收到一个错误:[vuex] do not mutate vuex store state outside mutation handlers.
我不明白,因为我没有改变 Vuex 之外的任何东西。
谁能建议如何解决这个问题?
我可以通过简化setError
为仅分配错误并删除setTimeout
部分来解决此问题,但我必须在其他地方这样做:
flashError(message) {
this.$store.commit('setError', message)
setTimeout(() => {
this.$store.commit('setError', null)
}, 5000)
},
这个解决方案似乎不是最理想的,因为我希望能够在任何地方临时设置这个错误
非常感谢
解决方案
基于我们的评论交流,我创建了一个示例组件来演示如何在不涉及 Vuex 的情况下自动关闭 flash 错误。
<template>
<div class="flash-error-auto-close">
<h4>Flash Error with Auto Close</h4>
<div class="row">
<div class="col-md-6">
<button class="btn btn-secondary" @click="triggerTimedErrorDisplay">Show Flash Error</button>
<div id="flash-error" v-if="displayError" class="alert alert-danger" role="alert">
{{ errorMessage }}
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
errorMessage: 'This is the error message',
displayError: false,
displayTime: 5000
}
},
methods: {
triggerTimedErrorDisplay() {
this.displayError = true;
setTimeout( () => {
this.displayError = false;
}, this.displayTime);
}
}
}
</script>
<style scoped>
#flash-error {
margin-top: 0.5rem;
}
</style>
推荐阅读
- javascript - KnockoutJS 过滤数组
- java - 当需要 nativeJdbcExtractor 时,Spring 5 JDBC 方法是什么?
- sql - 根据另一个 CTE 百分比从列表中提取最高百分比的 ID
- javascript - url 资源部分的正则表达式
- c# - 验证信息的格式不正确。检查 .net core 中 Azure Ratecard API 中 Authorization 标头的值
- objectbox - ObjectBox 将两列相加
- javascript - 如何从 cookie 中获取价值以输入“日期”?
- r - 验证时间序列索引
- java - 我的 java 程序卡在 Transport.send(message) 行
- r - 如何将 Rshiny 选择输入带到前层?目前传单图例阻碍了选择