diff --git a/packages/core/src/compiler/trace-rerender.ts b/packages/core/src/compiler/trace-rerender.ts
index 4cb4e6c0..fb353bca 100644
--- a/packages/core/src/compiler/trace-rerender.ts
+++ b/packages/core/src/compiler/trace-rerender.ts
@@ -22,6 +22,15 @@ export function analyzeByTraceRerender(code: MS, locations: InsertLocation[]) {
});\n`,
}
+ // to avoid duplicate injection
+ const currentCode = code.toString()
+ const shouldInject = Object.entries(apiNames).map(([, alias]) => {
+ return !currentCode.includes(alias)
+ }).every(Boolean)
+
+ if (!shouldInject)
+ return code
+
locations.forEach(({ start, end }, idx) => {
if (idx === 0) {
code = ensureImport(code, {
@@ -30,6 +39,7 @@ export function analyzeByTraceRerender(code: MS, locations: InsertLocation[]) {
})),
}, start)
}
+
entries(injectedCodes).forEach(([, appendCode]) => {
code.prependLeft(end, appendCode)
})
diff --git a/packages/playground/package.json b/packages/playground/package.json
index dc6bc1c3..96b85507 100644
--- a/packages/playground/package.json
+++ b/packages/playground/package.json
@@ -15,6 +15,7 @@
},
"devDependencies": {
"@vitejs/plugin-vue": "^4.4.0",
+ "@vitejs/plugin-vue-jsx": "^3.1.0",
"serve": "^14.2.1",
"typescript": "^5.2.2",
"vite": "^4.4.11",
diff --git a/packages/playground/src/App.vue b/packages/playground/src/App.vue
index e3b5ddc9..78e77d0b 100644
--- a/packages/playground/src/App.vue
+++ b/packages/playground/src/App.vue
@@ -2,6 +2,7 @@
import { computed, reactive, ref } from 'vue'
import { useRouter } from 'vue-router'
import ReadCounter from './components/ReadCounter.vue'
+import TSX from './components/TSX.vue'
const count = ref(0)
const doubleCount = computed(() => {
@@ -43,6 +44,7 @@ const router = useRouter()
{{ count }}
{{ doubleCount }}
+ TSX: