文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Vue3,用组合编写更好的代码:动态返回(3/4)

2024-12-01 19:54

关注

如果你的组合可以根据其使用情况更改返回的内容会怎样?如果我们只需要一个值,它可以这样做。如果需要返回整个对象,它也能做到。

本文将介绍一种向可组合对象添加动态返回的模式。我们将了解何时使用该模式、如何实现它,并查看正在使用的模式的一些示例。

动态返回值的模式

这种模式延续了上一篇关于灵活参数的文章中 "为什么不两全其美?"的思路。一个可组合既可以返回一个单一的值,也可以返回一个值的对象。

// 返回一个值
const isDark = useDark();
// 返回多个值
const {
counter,
pause,
resume,
} = useInterval(1000, { controls: true });

这是一个不错的功能,因为我们可以控制复杂程度。当需要的是简单的时候,就简单。当需要复杂性时,则是复杂的。

VueUse的useInterval组合就是使用了这种模式。

大多数时候,在使用useInterval时,我们只需要 counter。所以默认情况下,它只是返回这个。

// 默认行为
const counter = useInterval(1000);
// 1...
// 2...
// 3...

如果你想暂停和重置 counter,也可以通过 controls 参数来做到这一点。

const {
counter,
pause,
resume,
} = useInterval(1000, { controls: true });
// 1...
// 2...
pause();
// ...
resume();
// 3...
// 4...

接下来,我们来看看这种模式怎么实现。

实现

为了实现这一模式,我们需要做两件事:

下面是大概的实现思路:

export default useComposable(input, options) {
// 1. Add in the `controls` option
const { controls = false } = options;
// ...
// 2. Either return a single value or an object
if (controls) {
return { singleValue, anotherValue, andAnother };
} else {
return singleValue;
}
}

也许你想在一个现有的选项上进行切换,而不是只为这个目的使用一个 controls 选项。也许使用三元表达式或比 if 语句更简洁。也可能有一种完全不同的方式最适合你。这种模式的重要之处在于切换,而不是切换的方式。

接下来,让我们看看VueUse的一些组合方法如何实现这一模式。

useInterval

首先,让我们深入了解一下useInterval的工作原理。

在可组合的最顶层,我们对 options 对象进行解构,取出 controls 选项并将其重命名为exposeControls,默认值为 false.

const {
controls: exposeControls = false,
immediate = true,
} = options;

最后,在if语句,判断 exposeControls,如果为 true 刚返回 counter 及其它属性,否则只返回 counter

if (exposeControls) {
return {
counter,
...controls,
};
else {
return counter;
}

有了这两段代码,我们可以使任何可组合的有一个更灵活的返回语句。

现在,在来看看 useNow 函数。

useNow 组合式返回一个现在时间 Date 对象,并进行响度式式更新。

const now = useNow();

默认情况下,它每一帧都会自我更新--默认每秒60次。我们可以改变它的更新频率,也可以暂停和恢复更新过程。

const { now, pause, resume } = useNow({ controls: true });

这个组合的工作方式与 useInterval 组合非常相似。在内部,它们都使用VueUse暴露的useIntervalFn 帮助器。

首先,我们对options对象进行解构,得到controls选项,再次将其更名为exposeControls,以避免命名冲突。

然后我们在可组合的结束时返回。这里我们使用if语句在两种情况之间切换。

if (exposeControls) {
return {
now,
...controls,
};
else {
return now;
}

正如你所看到的,这种模式在useInterval和useNow组合中的实现几乎是一样的。VueUse中所有实现这种模式的组合物都是以这种特殊方式实现的。

下面是我能找到的所有在VueUse中实现这种模式的可组合的列表,供你自己进一步探索。

总结

我们看到,动态返回值让我们可以更灵活地选择如何使用可组合。我们可以得到一个单一的值,如果这就是我们需要的。我们也可以得到一个包含值、方法和其他我们可能想要的东西的整个对象。

但我们并不只是看了这个模式本身。我们看到了VueUse的useIntervaluseNow组件是如何实现这一模式的。

这种模式非常适合在大多数情况下简化我们的代码,同时在需要的时候仍然允许更大的复杂性。这有点像一张带抽屉的桌子。当你需要的时候,你可以把很多东西放在桌子上。但你也可以把它们放在抽屉里以保持整洁。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯