我是Vue和Vuex的新手,我想弄清楚如何对商店中的数据进行变异。
当前在我的州,默认用户名是“ default”,我想将其更改为“ otto”,以后我将无法从数据库中获取此信息。但是出于理解的目的,我只是想让它起作用。
此时,组件已正确加载,并显示“默认”。没有错误。
store.js:
// store.js
export default {
state: {
username: 'default'
},
getters: {
},
mutations: {
changeUsername (state) {
state.username = 'otto'
}
},
actions: {
changeUsername (context) {
context.commit('changeUsername')
}
}
}
vue文件:
// Basic.vue
<template>
<div>
<p>{{ username }}</p>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { mapMutations } from 'vuex';
import { mapActions } from 'vuex';
export default {
name: "basic",
computed: {
...mapState([
'username'
])
},
methods: {
...mapMutations([
'changeUsername'
]),
...mapActions([
'changeUsername'
])
}
}
</script>
答案 0 :(得分:0)
<template>
<div>
<p @click="changeUsername">{{ username }}</p>
</div>
</template>
如果用户点击这样的p标签,则可以更改用户名。
答案 1 :(得分:0)
不包括您的突变,因为您的操作会调用它。并在按钮点击上调用操作,例如:
商店:
// store.js
export default {
state: {
username: 'default'
},
getters: {
username: state => state.username
},
mutations: {
setUsername (state) {
state.username = 'otto'
}
},
actions: {
updateUsername (context) {
context.commit('setUsername ')
}
}
}
组件:
// Basic.vue
<template>
<div>
<p>{{ username }}</p>
<button @click="updateUsername">Change!</button>
</div>
</template>
<script>
export default {
name: "basic",
computed: {
username() {
return this.$store.getters.username
}
},
methods: {
updateUsername() {
this.$store.dispatch('updateUsername')
}
}
}
</script>
其他建议:在命名您的变异和动作时要小心。您不希望它们使用相同的名称以避免不必要的行为。通常,我会根据请求的内容来命名我的突变setXXXX
和动作getXXX
或patchXXX
。