javascript - 计算值更改时组件不重新渲染
问题描述
当计算值发生变化时,我PreviewExerciseItem
不会重新渲染。计算的值是我的 vuex 商店中的一个 getter。
我没有改变我的 vuex 状态,我设置了一个新对象。这是我的突变:
selectedWorkout: (state, workout) => {
state.selectedWorkout = {...workout};
}
吸气剂:selectedWorkout: (state) => state.selectedWorkout,
这是我的组件。PreviewExerciseItem
当我的 selectedWorkout 更改但h1
about 正在正确更新时,该组件不会重新呈现
<template>
<div v-if="selectedWorkout">
<h1 v-if="selectedWorkout">{{selectedWorkout.exercises[1].progression}}</h1>
<PreviewExerciseItem v-for="(exercise, index) in selectedWorkout.exercises" :key="exercise.presetKey"
:exercise="exercise" :index="index" :selected="selectedExercise === index"
v-on:click.native="selectedExercise = index"/>
</div>
</template>
<script>
import db from '@/api/db'
import { mapGetters, mapActions, mapState } from "vuex";
import PreviewExerciseItem from "@/components/PreviewExerciseItem.vue"
export default {
components: {
PreviewExerciseItem
},
async asyncData({ store, params }) {
await store.dispatch('selectedRoutine', params.id);
return { routineId: params.id }
},
computed: {
...mapGetters(['user', 'selectedRoutine', 'selectedWorkout']),
},
watch: {
user: async function (user) {
const status = await db.fetchRoutineStatus(user.uid, this.routineId);
this.$store.dispatch('selectedWorkout', status);
console.log('Workout1', this.selectedWorkout) // Logs correctly updated Object
},
selectedWorkout: function (selectedWorkout) {
this.workout = {...selectedWorkout};
console.log('Workout2', this.selectedWorkout) // Also updated object
this.$forceUpdate(); // Not doing anything
}
},
}
</script>
编辑:问题可能与我的突变有关。当我使用state.selectedWorkout = JSON.parse(JSON.stringify(workout));
而不是state.selectedWorkout = {...workout};
它时。我以为state.selectedWorkout = {...workout};
会分配一个新对象,但似乎没有。我不太喜欢 JSON 解决方案,有没有更好的方法来分配新的 Objet?我也试过state.selectedWorkout = Object.assign({}, workout)
哪个也不起作用。
解决方案
您需要使用此表单JSON.parse(JSON.stringify(workout));
来深度克隆workout
对象。
推荐阅读
- tsql - SQL SERVER V 2017 only 函数如何在兼容级别较低的数据库上运行
- swagger - Web API 2 和 Swagger
- tcl - tcl close 不会优雅地终止 tcp/ip 连接
- fortran - 是否可以强制 Fortran 编译器使用单精度?
- c# - 嵌套映射配置(另一个内部的现有配置)
- c# - URL.action 转到服务器,但不是根 URL
- sql - True/False 表中的最后一条记录
- python - 可读属性方法和仅将数据作为属性返回的可调用函数有什么区别?
- javascript - 如何从具有特定范围的嵌套数组中获取项目 - Javascript
- c - 无论我输入哪一年,我的程序总是告诉我它是闰年,即使它不是