From: edison Date: Wed, 16 Jul 2025 12:51:00 +0000 (+0800) Subject: Merge branch 'minor' into edison/fix/vaporOnce X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Fedison%2Ffix%2FvaporOnce;p=thirdparty%2Fvuejs%2Fcore.git Merge branch 'minor' into edison/fix/vaporOnce --- 50dc1fb8b7425f6a57019c1d91e2d3007460622c diff --cc packages/runtime-vapor/__tests__/component.spec.ts index b8a0180762,b96a932a2f..ce901e1993 --- a/packages/runtime-vapor/__tests__/component.spec.ts +++ b/packages/runtime-vapor/__tests__/component.spec.ts @@@ -312,69 -312,9 +314,69 @@@ describe('component', () => app.unmount() expect(host.innerHTML).toBe('') - expect(i.scope.effects.length).toBe(0) + expect(getEffectsCount(i.scope)).toBe(0) }) + it('work with v-once + props', () => { + const Child = defineVaporComponent({ + props: { + count: Number, + }, + setup(props) { + const n0 = template(' ')() as any + renderEffect(() => setText(n0, props.count)) + return n0 + }, + }) + + const count = ref(0) + const { html } = define({ + setup() { + return createComponent( + Child, + { count: () => count.value }, + null, + true, + true, // v-once + ) + }, + }).render() + + expect(html()).toBe('0') + + count.value++ + expect(html()).toBe('0') + }) + + it('work with v-once + attrs', () => { + const Child = defineVaporComponent({ + setup() { + const attrs = useAttrs() + const n0 = template(' ')() as any + renderEffect(() => setText(n0, attrs.count as string)) + return n0 + }, + }) + + const count = ref(0) + const { html } = define({ + setup() { + return createComponent( + Child, + { count: () => count.value }, + null, + true, + true, // v-once + ) + }, + }).render() + + expect(html()).toBe('0') + + count.value++ + expect(html()).toBe('0') + }) + test('should mount component only with template in production mode', () => { __DEV__ = false const { component: Child } = define({ diff --cc packages/runtime-vapor/src/component.ts index da65f24d55,da57882c49..83656aa55b --- a/packages/runtime-vapor/src/component.ts +++ b/packages/runtime-vapor/src/component.ts @@@ -187,9 -185,16 +186,17 @@@ export function createComponent rawProps as RawProps, rawSlots as RawSlots, appContext, + once, ) + // HMR + if (__DEV__ && component.__hmrId) { + registerHMR(instance) + instance.isSingleRoot = isSingleRoot + instance.hmrRerender = hmrRerender.bind(null, instance) + instance.hmrReload = hmrReload.bind(null, instance) + } + if (__DEV__) { pushWarningContext(instance) startMeasure(instance, `init`) diff --cc packages/runtime-vapor/src/componentProps.ts index 6d1c686c94,55eadb9804..6832bd9103 --- a/packages/runtime-vapor/src/componentProps.ts +++ b/packages/runtime-vapor/src/componentProps.ts @@@ -24,7 -23,7 +23,8 @@@ import import { ReactiveFlags } from '@vue/reactivity' import { normalizeEmitsOptions } from './componentEmits' import { renderEffect } from './renderEffect' +import { pauseTracking, resetTracking } from '@vue/reactivity' + import type { interopKey } from './vdomInterop' export type RawProps = Record unknown> & { // generated by compiler for :[key]="x" or v-bind="x"