mil*_*fer 2 hook mixins vue.js vuejs3 vue-composition-api
我一直在四处寻找(但我找不到)以下问题的答案。
在 Vue 2.x 中,您可以将 mixins 用于生命周期钩子,例如:我可以创建一个 Mixins.js
export default {
created() {
console.log('test');
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在一个组件中,执行以下操作:
import mixins from "../misc/mixins";
export default {
name: "My component",
mixins: [mixins],
created() {
console.log('Another test');
}
}
Run Code Online (Sandbox Code Playgroud)
如果我运行“我的组件”,我会在控制台中同时获得“另一个测试”和“测试”。我找不到使用 Composition API 执行类似操作的方法(当然,我可以在“onMounted”中执行从另一个文件导入的函数,但这不是那么优雅)。
有办法吗?
谢谢!
使用 Composition API,您必须导入所需的生命周期。包含列表的文档:https : //v3.vuejs.org/guide/composition-api-lifecycle-hooks.html
组件.vue
<script>
import { onMounted } from 'vue'
export default {
setup(props) {
console.log('CREATED')
onMounted(() => {
console.log('MOUNTED')
});
return {};
},
}
</script>
Run Code Online (Sandbox Code Playgroud)
请注意,没有onCreated(). 从文档:
因为 setup 是围绕 beforeCreate 和 created 生命周期钩子运行的,所以您不需要显式定义它们。换句话说,在这些钩子中编写的任何代码都应该直接在 setup 函数中编写。
现在,如果您愿意,您可以简单地将其提取到单独的文件中,通常称为可组合文件。
demoLifehooks.js
import { onMounted } from 'vue'
export default () => {
console.log('Created')
onMounted(() => {
console.log('Mounted')
})
}
Run Code Online (Sandbox Code Playgroud)
现在只需导入它并执行。
组件.vue
<script>
import useDemoLifecycles from './demoLifecycles.js'
export default {
setup(props) {
useDemoLifecycles()
return {};
},
}
</script>
Run Code Online (Sandbox Code Playgroud)
<script setup>
import useDemoLifecycles from './demoLifecycles.js'
useDemoLifecycles()
</script>
Run Code Online (Sandbox Code Playgroud)
登录控制台:
已创建 已
安装
将其命名为useSomething只是惯例。通过导出不是默认函数而是命名函数来强制它不是一个坏主意:
export const useDemoLifecycles = () => { console.log('code here') }
Run Code Online (Sandbox Code Playgroud)
进而
import { useDemoLifecycles } from './demoLifecycles'
Run Code Online (Sandbox Code Playgroud)
此外,如果您想要来自该文件的引用或其他数据,它将是
const { a, b } = useDemoLifecycles()
Run Code Online (Sandbox Code Playgroud)
请注意,实际上在我的示例中,并没有像 Mixins 那样有太多 Vue 的“魔力”。这几乎是纯 JS 的东西,而不是 Vue 特定的代码。所以它实际上比旧的 Options API + Mixins 更简单。