onMounted(() => {
this.articles = ArticlesAPI.loadArticles()
})
const searchArticles = (id) => {
return articles.filter(() => {
// 一些搜索代码
})
}
return {
articles,
searchParameters,
searchArticles
}
}
现在,在我们的 setup 方法中,我们可以通过调用我们的方法来访问属性。而且,当然,我们还必须记住从设 setup 法中返回它们。
export default {
setup () {
const { articles, searchParameters, searchArticles } = useSearchArticles() return {
articles,
searchParameters,
searchArticles
}
}
}
在提取的逻辑中访问组件属性
Composition API 中的另一个新变化是 this 引用的变化,这一变化意味着我们不能再以相同的方式使用 prop、attributes 或 events。
简而言之,我们将必须使用 setup 方法的两个参数来访问 props,attribute,slot 或 emit 方法。如果我们只使用 setup 方法,一个快速的虚拟组件可能是这样的。
export default {
setup (props, context) { onMounted(() => {
console.log(props)
context.emit('event', 'payload')
})
}
}
但是现在我们要提取我们的逻辑,我们要把我们的逻辑包装器方法也接受参数。通过这种方式,我们可以从 setup 方法传递我们的 props 和 context 属性,逻辑代码可以访问它们。
const checkProps = (props, context) => {
onMounted(() => {
console.log(props)
context.emit('event', 'payload')
})
}
export default {
setup (props, context) {
checkProps(props, context)
}
}
重用逻辑
最后,如果我们要编写一些逻辑,希望能够在多个组件中使用,则可以将逻辑提取到其自己的文件中,并将其导入到我们的组件中。
然后,我们可以像之前一样调用该方法。假设我们将我们的 useSearchArticles 方法移至名为 use-search-articles-logic.js 的文件中,如下所示
import { ref, onMounted } from 'vue'
export function useSearchArticles () {
const articles = ref([])
const searchParameters = ref([]) onMounted(() => {
this.articles = ArticlesAPI.loadArticles()
})
const searchArticles = (id) => {
return articles.filter(() => {
// 一些搜索代码
})
}
return {
articles,
searchParameters,
searchArticles
}
}
使用这个新文件,我们的原始组件将看起来像这样
import { useSearchArticles } from './logic/use-search-articles-logic'










