为什么要使用 computed 来计算新的数据?

来源:4-6 ColumnList 组件使用 Bootstrap 美化

崔顺彪

2021-05-08

如果不使用 computed 也是可以实现 columnList 数组。

setup (props) {
  const columnList = props.list.map(column => {
    if (!column.avatar) {
      column.avatar = require('@/assets/logo.png')
    }
    return column
  })
  return {
    columnList
  }
}

没有 computed 的方式。

setup (props) {
  const columnList = computed(() => {
    return props.list.map(column => {
      if (!column.avatar) {
        column.avatar = require('@/assets/logo.png')
      }
      return column
    })
  })
  return {
    columnList
  }
}

不知道加不加 computed 细节上有什么区别么?因为我记得 props.list 这个也是响应式的,父级数据变化了,里面数据也会变化。如果没有 computed 的话,外层数据变了,里面的 columnList 并不能重新计算,对吧?
对的,我自己写了 setTimeout 又改了下父级数据,是这样的。
但如果不重新处理「默认图片」的话,直接使用 props 传入的值 list 的话,父级改变了,数据也就跟着改变了。
所以,这块用 computed 主要是为了解决「父级数据改变了,columnList 重新计算默认图片」这个逻辑。

写回答

1回答

张轩

2021-05-09

同学 你总结的没错 假如不用 computed 父级数据更新以后子组件中是不会更新的 ,特别注意 setup 是只执行一次的,任何想要有响应式变化的数据都要用 computed 进行包裹

1
0

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程