Vue计算属性未识别props变更?格式化todo.date需求遇阻
问题分析与修复方案
你的计算属性存在两个核心问题,导致日期格式化功能失效:
1. 计算属性未返回结果
计算属性的核心是返回基于依赖推导的值,而非给实例属性赋值。你当前的getDate没有返回值,模板中{{ getDate }}自然无法获取到格式化后的日期。
2. 响应式依赖的正确绑定
只要计算属性正确依赖this.todo.date,当父组件中todo.date(或整个todo对象)发生响应式变更时,计算属性会自动重新计算——但前提是父组件的修改符合Vue响应式规则(比如直接修改对象属性、或替换整个todo对象,而非通过非响应式方式修改)。
修正后的代码
import dayjs from 'dayjs' export default{ name:'To-do', props:{ todo: Object }, data(){ return{ isChecked: this.todo.checked, isModifying: false, } }, computed:{ getDate(){ // 直接返回格式化后的日期,无需给this.date赋值 return dayjs(this.todo.date).format("YY MM DD") } } }
额外优化提示
如果你需要isChecked同步父组件todo.checked的变更,不要在data中初始化赋值(data仅在组件创建时赋值一次),改用带 setter 的计算属性实现双向同步:
computed: { isChecked: { get() { return this.todo.checked }, set(val) { this.$emit('update:checked', val) } }, getDate(){ return dayjs(this.todo.date).format("YY MM DD") } }
内容的提问来源于stack exchange,提问作者YESSS
相关产品推荐
相关产品推荐

