问题——-store 改变后组件没有重新渲染
在业务中, 经常会遇到:
A组件点击一个事件 -> 改变store state -> 这时需要通知B组件, 让其重新渲染 -> B组件会根据新的store state渲染组件
组件A: 改变store
// 某vue 组件中
selectRole(role) {
this.roleName = role.roleName
//刷新roleID
this.$store.dispatch('user/changeRole', role.roleId)
}
// store action:
changeRole({ commit }, roleId){
//把roleId赋值给state.roleId
commit('SET_CURRENT_ROLE_ID', roleId)
},
组件B
1, 需要监听state: vue 的js部分
computed: {
...mapGetters(['RoleId'])
},
watch: {
// 监控store中currentRoleID
RoleId(value) {
// 改变量
this.count++
console.log('RoleId', value)
}
},
这里每当RoleId改变时, count就会增加一, 作为变动的key值
vue的template部分
<div :key="count">
<div>hello world</div>
</div>
强制 Vue 重新渲染组件的最佳方法是在组件上设置:key。当我们需要重新渲染组件时,只需更 key 的值,Vue 就会重新渲染组件。
这是一个非常简单的解决方案。
当然,你可能会对其他方式会更感兴趣:
简单粗暴的方式:重新加载整个页面
不妥的方式:使用 v-if
较好的方法:使用Vue的内置forceUpdate方法 (本人尝试未成功)
参考文献:
https://blog.csdn.net/qq449245884/article/details/104057886