蓝狮注册登陆围绕Vue 3 Composition API构建一个应用程序,包含一些优秀实践!

1、vue 3和Composition api的状况
Vue 3已经发布了一年,它的主要新功能是:Composition API。从2021年秋季开始,推荐新项目使用Vue 3的 script setup 语法,所以希望我们能看到越来越多的生产级应用程序建立在Vue 3上。

这篇文章旨在展示一些有趣的方法来利用Composition API,以及如何围绕它来构造一个应用程序。

2、可组合函数和代码重用
新的组合API释放了许多有趣的方法来重用跨组件的代码。蓝狮注册开户复习一下:以前我们根据组件选项API分割组件逻辑:data、methods、created 等。

// 选项API风格
data: () => ({
refA: 1,
refB: 2,
}),
// 在这里,我们经常看到500行的代码。
computed: {
computedA() {
return this.refA + 10;
},
computedB() {
return this.refA + 10;
},
},
有了Composition API,我们就不会受限于这种结构,可以根据功能而不是选项来分离代码。

setup() {
const refA = ref(1);
const computedA = computed(() => refA.value + 10);
/*
这里也可能是500行的代码。
但是,这些功能可以保持在彼此附近!
*/
const computedB = computed(() => refA.value + 10);
const refB = ref(2);

return {
  refA,
  refB,
  computedA,
  computedB,
};

},
Vue 3.2引入了

在我看来,这是一个比较大想法。我们可以把这些功能分成自己的文件,而不是用通过放置 在script setup中的位置来保持它们的分离。下面是同样的逻辑,把文件分割开来的做法。

// Component.vue

// featureA.js
import { ref, computed } from “vue”;

export default function () {
const refA = ref(1);
const computedA = computed(() => refA.value + 10);
return {
refA,
computedA,
};
}
// featureB.js
import { ref, computed } from “vue”;
export default function () {
const refB = ref(2);
const computedB = computed(() => refB.value + 10);
return {
refB,
computedB,
};
}
注意,featureA.js和featureB.js导出了Ref和ComputedRef类型,因此所有这些数据都是响应式的。

然而,这个特定的片段可能看起来有点矫枉过正。

想象一下,这个组件有500多行代码,而不是10行。蓝狮注册登陆通过将逻辑分离到use__.js文件中,代码变得更加可读。
我们可以在多个组件中自由地重复使用.js文件中的可组合函数 不再有无渲染组件与作用域槽的限制,也不再有混合函数的命名空间冲突。因为可组合函数直接使用了Vue的ref和computed,所以这段代码可以与你项目中的任何.vue组件一起使用。
陷阱1:setup 中的生命周期钩子
如果生命周期钩子(onMounted,onUpdated等)可以在setup里面使用,这也意味着我们也可以在我们的可组合函数里面使用它们。甚至可以这样写:

// Component.vue

// store/actions.js
import { onMounted } from ‘vue’
// …
actions: {
myAction() {
onMounted(() => {
console.log(‘its crazy, but this onMounted will be registered!’)
})
}
}
// …
而且Vue甚至会在vuex内部注册生命周期钩子!

有了这种灵活性,了解如何以及何时注册这些钩子就很重要了。请看下面的片段。哪些onUpdated钩子将被注册?

结论:在声明生命周期方法时,应使其在setup初始化时同步执行。否则,它们在哪里被声明以及在什么情况下被声明并不重要。

陷阱2:setup 中的异步函数
我们经常需要在我们的逻辑中使用async/await。天真的做法是尝试这样做:

0 Comments
Leave a Reply