refactor(runtime-core): remove emit return value
BREAKING CHANGE: this.$emit() and setupContext.emit() no longer
return values. For logic that relies on return value of listeners,
the listener should be declared as an `onXXX` prop and be called
directly. This still allows the parent component to pass in
a handler using `v-on`, since `v-on:foo` internally compiles
to `onFoo`.
ref: https://github.com/vuejs/rfcs/pull/16
This commit is contained in:
47
packages/runtime-core/__tests__/componentSlots.spec.ts
Normal file
47
packages/runtime-core/__tests__/componentSlots.spec.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { ref, render, h, nodeOps, nextTick } from '@vue/runtime-test'
|
||||
|
||||
describe('component: slots', () => {
|
||||
// TODO more tests for slots normalization etc.
|
||||
|
||||
test('should respect $stable flag', async () => {
|
||||
const flag1 = ref(1)
|
||||
const flag2 = ref(2)
|
||||
const spy = jest.fn()
|
||||
|
||||
const Child = () => {
|
||||
spy()
|
||||
return 'child'
|
||||
}
|
||||
|
||||
const App = {
|
||||
setup() {
|
||||
return () => [
|
||||
flag1.value,
|
||||
h(
|
||||
Child,
|
||||
{ n: flag2.value },
|
||||
{
|
||||
foo: () => 'foo',
|
||||
$stable: true
|
||||
}
|
||||
)
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
render(h(App), nodeOps.createElement('div'))
|
||||
expect(spy).toHaveBeenCalledTimes(1)
|
||||
|
||||
// parent re-render, props didn't change, slots are stable
|
||||
// -> child should not update
|
||||
flag1.value++
|
||||
await nextTick()
|
||||
expect(spy).toHaveBeenCalledTimes(1)
|
||||
|
||||
// parent re-render, props changed
|
||||
// -> child should update
|
||||
flag2.value++
|
||||
await nextTick()
|
||||
expect(spy).toHaveBeenCalledTimes(2)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user