歡迎您光臨本站 註冊首頁

詳解Vue3 Composition API中的提取和重用邏輯

←手機掃碼閱讀     zhang3221994 @ 2020-04-29 , reply:0

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([]) 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' export default { setup (props,) { const { articles, searchParameters, searchArticles } = useSearchArticles() return { articles, searchParameters, searchArticles } } }

最後



希望本文能幫助你更好地瞭解 Composition API 將如何改變我們的編碼方式。

但是,與往常一樣,項目的組織取決於開發人員設計出色的組件代碼並創建可重用邏輯的意願。

請記住,我們的目標是提高可讀性,而在Vue中,Composition API 是實現這一點的好方法。


[zhang3221994 ] 詳解Vue3 Composition API中的提取和重用邏輯已經有460次圍觀

http://coctec.com/docs/vue-js/show-post-232123.html