共计 1967 个字符,预计需要花费 5 分钟才能阅读完成。
在 Vue.js 开发的动静环境中,在单个组件中解决简单的业务逻辑可能会导致轻便的文件和保护噩梦。尽管 Pinia 提供集中式状态治理,但仅依赖它来解决简单的业务逻辑可能会导致代码凌乱。本文探讨了应用 Composition API 的代替办法,阐明开发人员如何将数据和逻辑封装在自定义 hooks 中以实现高效的状态治理。
驾驭简单的业务逻辑
在日常开发中,常常会呈现性能变得过于简单而无奈限度在单个 Vue.js 组件中的状况。合成组件是合乎逻辑的解决方案,但这带来了在组件之间共享数据和业务逻辑的挑战。尽管 Pinia 在这方面很受欢迎,但如果宽泛用于所有简单的业务逻辑,它就会变得不堪重负。
拥抱 Composition API 和自定义 Hook
一个引人注目的代替计划是利用 Composition API 将数据和业务逻辑封装在自定义 hooks 中。这些钩子(以 useStore
函数为例)成为状态定义、更新和特定业务逻辑的核心。反过来,组件只须要与这些钩子公开的状态和办法进行交互,从而形象出外部的复杂性。
// 应用 Composition API 自定义 hook | |
import {computed, ref} from "vue"; | |
// 在 useStore 函数内部定义 count 变量 | |
const count = ref(0); | |
const doubleCount = computed(() => {return count.value * 2;}); | |
export const useStore = () => {function increment() {count.value = count.value + 1;} | |
function decrement() {count.value = count.value - 1;} | |
return { | |
count, | |
doubleCount, | |
increment, | |
decrement, | |
}; | |
}; |
孤立的 Hook 调用的陷阱
当 CountValue
和 CountBtn
等组件在其 setup 函数中独立调用 useStore
挂钩时,就会呈现挑战。本文揭示了每次调用时创立 count
变量的独立实例的陷阱,从而导致组件之间的状态更新不统一。
// CountValue.vue component | |
<template> | |
<p>count's value is {{count}}</p> | |
<p>doubleCount's value is {{doubleCount}}</p> | |
</template> | |
<script setup lang="ts"> | |
import {useStore} from "./store"; | |
// 对 useStore 的独立调用创立独立的 count 实例 | |
const {count, doubleCount} = useStore(); | |
</script> | |
// CountBtn.vue component | |
<template> | |
<button @click="decrement">count--</button> | |
<button @click="increment">count++</button> | |
</template> | |
<script setup lang="ts"> | |
import {useStore} from "./store"; | |
// 对 useStore 的独立调用创立独立的 count 实例 | |
const {decrement, increment} = useStore(); | |
</script> |
协调组件之间的状态
为了克服这一挑战,一种优化办法是将 count
变量的定义从新定位到 useStore
函数之外。这可确保调用 useStore
hook 的所有组件共享 count
变量的同一实例,从而促成同步状态治理。
// 将计数定义移至 useStore 函数之外 | |
import {computed, ref} from "vue"; | |
const count = ref(0); | |
const doubleCount = computed(() => {return count.value * 2;}); | |
export const useStore = () => {function increment() {count.value = count.value + 1;} | |
function decrement() {count.value = count.value - 1;} | |
return { | |
count, | |
doubleCount, | |
increment, | |
decrement, | |
}; | |
}; |
在 Pinia 仿佛难以应答简单业务逻辑的各个方面的状况下,Composition API 提供了一个洁净、有组织的代替计划。通过将数据和逻辑封装在自定义钩子中,开发人员能够在 Vue.js 应用程序中的模块化和高效状态治理之间获得均衡。
本文强调了 Composition API 在构建 Vue.js 解决方案中的多功能性,以最大限度地进步灵活性和可维护性。通过采纳自定义钩子,开发人员能够编写合乎 Vue.js 准则的有组织、可读的代码。