详解Vue3 Composition API中的提取和重用逻辑

2020-06-16 06:55:42易采站长站整理

Vue3 Composition API可以在大型项目中更好地组织代码。然儿,随着使用几种不同的选项属性切换到单一的setup 方法,许多开发人员面临的问题是……

这会不会更混乱,因为一切都在一个方法中

乍一看可能很容易,但是实际上只需要花一点点时间来编写可重用的模块化代码。

让我们来看看如何做到这一点。

问题

Vue.js 2.x 的 Options API 是一种非常直观的分隔代码的方法


export default {
data () {
return {
articles: [],
searchParameters: [] }
},
mounted () {
this.articles = ArticlesAPI.loadArticles()
},
methods: {
searchArticles (id) {
return this.articles.filter(() => {
// 一些搜索代码
})
}
}
}

问题是,如果一个组件中有数百行代码,那么就必须在多个部分data、methods、computed等中为单个特性(例如搜索)添加代码。

这意味着仅一项功能的代码可能会分散分布在数百行中,并分布在几个不同的位置,从而使其难以阅读或调试。图片描述

这只是Vue Composition API RFC中的一个示例,展示了现在如何按功能组织代码。

现在,这是使用新的Composition API的等效代码。


import { ref, onMounted } from 'vue'

export default {
setup () {
const articles = ref([])
const searchParameters = ref([])

onMounted(() => {
this.articles = ArticlesAPI.loadArticles()
})

const searchArticles = (id) => {
return articles.filter(() => {
// 一些搜索代码
})
}

return {
articles,
searchParameters,
searchArticles
}
}
}

现在,为了解决前面关于组织的问题,我们来看看一个提取逻辑的好方法。

提取逻辑

我们的最终目标是将每个功能提取到自己的方法中。这样一来,如果我们想调试它,所有的代码都在一个地方。

这非常简单,但是最后我们必须记住,如果我们希望能够在模板中访问数据,则仍然必须使用我们的 setup 方法来返回数据。

我们来创建新方法 useSearchArticles 并让它返回我们在 setup 方法中返回的所有东西。


const useSearchArticles = () => {
const articles = ref([])
const searchParameters = ref([])