slots not re-rendering while passing `$scopedSlots` to children
woshiguabi opened this issue · 1 comments
Version
2.7.14
Reproduction link
Steps to reproduce
Click the change button
What is expected?
slot re-rendering
What is actually happening?
slot not re-rendering
To reproduce this issue, two conditions must be met
- Both
slotandscopedSlotare passed to the parent component - The parent component passes
$scopedSlotsto the child component
After deconstructing $scopedSlots this issue resolved, but this issue is important for library developers because passing $scopedSlots is a very common usage.
I think it might be because you directly passed this.$scopedSlots into Inner.data.scopedSlots, which led to the implicit property $stable that was originally defined in Wrapper.$scopedSlots also being transferred to Inner.data.scopedSlots.
So this is why using the spread operator works fine, because the spread operator does not expand implicit properties.
excepted
actually(in your example)
And then, due to Vue's slot optimization mechanism, it ultimately led to the following logic...

So, Vue reused the previous scoped slot object, thereby reducing the rendering overhead.

