vue组件传递props是异步过程吗?

来源:18-1 商品详情页实现(1)

学东西要快

2018-01-13

之前认为vue组件传递props跟变量赋值一样应该是个同步操作

但是这里遇到了不能理解的地方(代码都是从老师源码上抄下来的)

goods组件代码片段

<food @add="addFood" :food="selectedFood" ref="food"></food>

selectFood(food, event) {
    if (!event._constructed) {
        return;
    }
    this.selectedFood = food;
    this.$refs.food.show();
}

food组件代码片段

props: {
    food: {
    type: Object
    }
}

show() {
    this.showFlag = true;
    this.selectType = ALL;
    this.onlyContent = true;
    console.log(this.food.name); // 观测传入的props值
}


//img.mukewang.com/szimg/5a59e6a300011aaf10850642.jpg

//img.mukewang.com/szimg/5a59e6a30001ccf810950643.jpg

我想是不是因为props是异步传递的,在console.log的时候props还没有赋值完全,所以第一次点击商品输出undefined,第二次点击输出第一次点击的那个商品名。然后又因为vue数据驱动的特性(对数据驱动不是很理解,应该大概就是数据变了,dom也会自动跟着变),所以即使props接收滞后,但是又能正常显示页面。

不知道我理解是否有误,请老师指正

写回答

1回答

ustbhuangyi

2018-01-14

本质原因并不是异步传递,是因为你更新的是父组件的 selectedFood,而父组件数据变化到子组件的更新是一个异步过程,在 nextTick 后发生。所谓数据驱动就是数据变化了,DOM 会跟着自动变。所以当子组件的 prop 发生变化,拿到数据后,就可以正常渲染了。

0
2
慕雪0323865
回复
学东西要快
你好 能不能请教下这段代码的执行是什么样的吗 有点看不懂
2018-03-11
共2条回复

Vue.js2.5+cube-ui重构饿了么App(经典再升级)

掌握Vue1.0到2.0再到2.5最全版本应用与迭代,打造极致流畅的WebApp

9868 学习 · 4162 问题

查看课程