【发布时间】:2020-05-09 15:29:24
【问题描述】:
我正在尝试直接从 store 中设置一组组件样式,这样当 store 发生变化时,每个组件的设计也会发生变化。
我在我的 Vuex 商店中存储了一组链接,如下所示:
links: [
{id: 1, text: 'Banana is a test', design: {color: 'red', 'background-color': 'blue', padding: '51px', margin: '5px', 'border-width' : '10px', 'border-color': 'blue', 'font-weight' : 600, font: 'Arial'}},
{id: 2, text: 'This is a test', design: {color: 'red', 'background-color': 'blue', padding: '20px', margin: '10px', 'border-width' : '10px', 'border-color': 'green', 'font-weight' : 600, font: 'Arial'}},
{id: 3, text: 'Monkey is a test', design: {color: 'red', 'background-color': 'blue', padding: '5px', margin: '5px', 'border-width' : '10px', 'border-color': 'green', 'font-weight' : 600, font: 'Arial'}},
]
这就是我尝试渲染它们的方式
<a v-for="link in links" :key=link.id :href="link.destination" :id=link.id :style="link.design">
{{link.text}}
</a>
问题是,当 Vuex 商店中的设计对象发生变化时,链接样式不会像我预期的那样随后更新。
在我的 Vue 组件中,我尝试以不同的方式获取链接,假设这会改变反应性。目前我使用这样的计算方法来获取它们:
computed: {
getLinks: function() {
return this.$store.state.links
}
},
但每当我更改背景颜色的值时,例如从“蓝色”到“红色”,我都必须重新加载页面才能看到更改。每次调用突变时是否需要强制重新呈现页面?
这是我的变异供参考:
setSelectedItemDesign (state, payload ) {
state.selectedItem.design[Object.keys(payload)[0]] = Object.values(payload)[0]
}
我会像这样从我的组件中调用它:
this.$store.commit('setSelectedItemDesign', {'background-color' : this.rgbaValue})
【问题讨论】:
-
样式名用驼峰写法,例如:
fontSize -
我认为此链接可能对您有所帮助。 vuejs.org/v2/guide/list.html#Array-Change-Detection
-
@nada 谢谢你是对的
标签: vue.js vuejs2 vue-component vuex nuxt.js