J'utilise vue3 avec l'API de composition, mais lorsque je construis le projet, l'élément ref est toujours indéfini.
Je l'ai copié, peut-être que je l'ai mal utilisé, mais je ne sais pas pourquoi.
const isShow = ref(false) const rootRef = ref<HTMLDivElement>(); export default function () { function changeShow() { isShow.value = !isShow.value; console.log(isShow.value, rootRef.value); } return { isShow, rootRef, changeShow }; }
HelloWorld.vue
和链接元素中使用 rootRef
. <script setup lang="ts"> import useShow from "../composables/useShow"; const { rootRef, isShow } = useShow(); </script> <template> <div ref="rootRef" v-show="isShow" class="test"></div> </template>
App.vue
et liez la fonction de clic. <script setup lang="ts"> import HelloWorld from "./components/HelloWorld.vue"; import useShow from "./composables/useShow"; const { changeShow } = useShow(); </script> <template> <button @click="changeShow">切换</button> <HelloWorld /> </template>
Quand je clique sur le bouton, cela fonctionne.
Mais lorsque je le construis et l'importe depuis la bibliothèque, cela ne fonctionne pas.
Mon vite.config.ts
est le suivant :
export default defineConfig({ plugins: [vue()], resolve: { alias: { "@": path.resolve(__dirname, "src") } }, build: { cssCodeSplit: true, sourcemap: true, lib: { entry: path.resolve(__dirname, "src/index.ts"), name: "my-project", fileName: format => `my-project.${format}.js` }, rollupOptions: { external: ["vue"], preserveEntrySignatures: "strict", output: { globals: { vue: "Vue" } } } } });
Je pense que le problème réside dans la définition de rootRef
. Il semble que seules les positions liées puissent être utilisées. Ce n'est pas différent de le définir dans un composant. Je dois l'utiliser à plusieurs endroits.
Ce qui est étrange, c'est qu'avec cela, l'environnement Dev fonctionne bien, mais pas l'environnement Pro. Dois-je modifier la configuration de build de vite ?
Que dois-je faire ?
Le problème c'est votre
App.vue
使用自己的composables/useShow
copie, pas celle de la bibliothèque.La solution est d'exporter les composables depuis la bibliothèque afin que votre application puisse utiliser les mêmes composables :
Dans
App.vue
, utilisez les composables de lib :RP GitHub