Skip to content

Commit 6b2d089

Browse files
committed
fix(showcase/vue): enable reactivity in props and slots
1 parent 552faba commit 6b2d089

File tree

1 file changed

+41
-13
lines changed

1 file changed

+41
-13
lines changed

js/showcase/src/vue/render.ts

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
defineComponent,
55
Fragment,
66
h as vueH,
7+
isRef,
78
Ref,
89
VNode,
910
} from "vue";
@@ -76,19 +77,46 @@ export const renderCaseSplitted = defineComponent<{
7677
outProps[eventName] = eventValue;
7778
}
7879

80+
let manualTrigger: () => void;
81+
const manualTriggerRef = customRef((track, trigger) => {
82+
manualTrigger = trigger;
83+
return {
84+
get: () => track(),
85+
set: () => undefined,
86+
};
87+
});
88+
89+
for (const slotSignal of Object.values(slots)) {
90+
createEffect(() => {
91+
slotSignal();
92+
manualTrigger();
93+
});
94+
}
95+
7996
return () =>
80-
vueH(Fragment, null, [
81-
inputs,
82-
vueH(
83-
component,
84-
outProps,
85-
Object.fromEntries(
86-
Object.entries(slots).map(([slotName, slotSignal]) => [
87-
slotName,
88-
() => slotSignal(),
89-
])
90-
)
91-
),
92-
]);
97+
vueH(
98+
Fragment,
99+
{
100+
manualTrigger: manualTriggerRef.value,
101+
},
102+
[
103+
inputs,
104+
vueH(
105+
component,
106+
Object.fromEntries(
107+
Object.entries(outProps).map(([propName, propRef]) => [
108+
propName,
109+
isRef(propRef) ? propRef.value : propRef,
110+
])
111+
),
112+
Object.fromEntries(
113+
Object.entries(slots).map(([slotName, slotSignal]) => [
114+
slotName,
115+
() => slotSignal(),
116+
])
117+
)
118+
),
119+
]
120+
);
93121
},
94122
});

0 commit comments

Comments
 (0)