尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Vant Use useToggle 组合式函数实战:用 10 行源码实现布尔状态切换
Vant Use useToggle 组合式函数实战用 10 行源码实现布尔状态切换【免费下载链接】vantA lightweight, customizable Vue UI library for mobile web apps.项目地址: https://gitcode.com/GitHub_Trending/va/vant导读useToggle是 Vant 移动端组件库内置组合式函数Composition API集合 vant/use 中最基础、最常用的一个工具它专门用于在true和false之间切换布尔状态。无论是控制弹层显隐、播放与暂停、开关选中态还是任何需要取反切换的业务场景都可以用它替代手写的ref加取反逻辑。读完本文你将掌握useToggle的完整 API、源码级实现原理以及它在 Vant 组件如 Calendar 懒渲染、Barrage 播放控制中的真实落地用法。useToggle 是什么useToggle是 vant/use 提供的组合式函数其官方文档定义非常简单用于在true和false之间进行切换Used to switch betweentrueandfalse。它的核心价值在于把定义一个布尔状态 手动取反这一高频操作封装成一个原子化的 API返回值是一个[state, toggle]元组——state是响应式布尔状态toggle是切换函数调用toggle()时如果不传参数会自动取反当前值。安装与引入useToggle随vant/use包一起发布。根据 packages/vant-use/package.jsonvant/use当前版本为1.6.0仅依赖vue^3.0.0peerDependencies是一个零额外依赖、sideEffects: false的纯 ESM/CJS 双格式包支持 tree-shaking。安装方式来自 packages/vant-use/README.md# with npm npm i vant/use # with yarn yarn add vant/use # with pnpm pnpm add vant/use # with Bun bun add vant/use安装后即可引入使用import { useToggle } from vant/use;vant/use的入口文件 packages/vant-use/src/index.ts 通过export *统一导出了useRect、useToggle、useRelation、useCountDown、useClickAway、useWindowSize、useScrollParent、useEventListener、usePageVisibility、useCustomFieldValue、useRaf、onMountedOrActivated等全部组合式函数useToggle是其中使用门槛最低的一个。基本用法官方文档use-toggle.en-US.md给出的基本用法如下import { useToggle } from vant/use; export default { setup() { const [state, toggle] useToggle(); toggle(true); console.log(state.value); // - true toggle(false); console.log(state.value); // - false toggle(); console.log(state.value); // - true }, };这里体现了useToggle的全部三种调用方式toggle(true)显式将状态设为truetoggle(false)显式将状态设为falsetoggle()不传参数时自动取反——当前值为false时切换为true反之亦然。state是一个Refboolean因此在组合式 API 中读取时需要使用.value在template模板中则会被自动解包直接使用state即可。在script setup中使用上述示例是 Options API 的setup()写法。在更现代的script setup语法Vant 自身的演示代码即采用此写法中用法完全一致script setup import { useToggle } from vant/use; const [visible, toggle] useToggle(false); /script template button clicktoggle() {{ visible ? 收起 : 展开 }} /button /template设置默认值useToggle接受一个可选的初始值参数defaultValue用于指定布尔状态的初始状态。默认值为falseimport { useToggle } from vant/use; export default { setup() { const [state, toggle] useToggle(true); console.log(state.value); // - true }, };从源码packages/vant-use/src/useToggle/index.ts可以看到默认值参数的实现方式import { ref } from vue; export function useToggle(defaultValue false) { const state ref(defaultValue); const toggle (value !state.value) { state.value value; }; return [state, toggle] as const; }两个值得注意的源码细节defaultValue false利用 ES6 默认参数语法实现不传则初始为false这与文档中参数表defaultValue默认值false的说明完全对应toggle (value !state.value)toggle函数的形参同样使用了默认参数——当调用方未传参时value自动取state.value的取反值从而实现了无参调用即取反的核心行为。API 说明类型定义官方文档给出的 TypeScript 类型声明为function useToggle( defaultValue: boolean, ): [Refboolean, (newValue: boolean) void];值得注意的是源码实现packages/vant-use/src/useToggle/index.ts使用了as const断言返回元组return [state, toggle] as const;as const让返回值的类型被精确推断为只读元组readonly [Refboolean, (value?: boolean) void]从而保证const [state, toggle] useToggle()这种解构写法在 TypeScript 下获得完整的类型推导。参数Params名称说明类型默认值defaultValue默认值booleanfalse返回值Return Value名称说明类型state状态值Refbooleantoggle切换状态值的函数(newValue?: boolean) void源码级实现原理整个useToggle的实现只有 10 行packages/vant-use/src/useToggle/index.ts核心逻辑可以拆解为三步创建响应式状态ref(defaultValue)基于传入的默认值创建一个Refboolean定义切换函数toggle函数接收可选参数value未传参时以!state.value作为默认值随后将其写入state.value返回元组以as const形式返回[state, toggle]供调用方解构。从这个实现可以推断出两个使用要点toggle本质上是一个状态赋值器它并不关心当前值是什么只是把计算好的新值写入state取反逻辑完全由默认参数!state.value承担由于toggle依赖闭包捕获的state因此它与state的生命周期绑定——组件卸载后不应再调用toggle这一点与 Vue 响应式系统的约定一致。在 Vant 组件库中的真实应用useToggle不是文档里的摆设Vant 自身的组件源码就大量使用了它。这里有两个典型的落地场景。场景一Calendar 月视图的懒渲染控制在 packages/vant/src/calendar/CalendarMonth.tsx 中useToggle被用于控制日历月视图的懒渲染import { useRect, useToggle } from vant/use; // ... setup(props, { emit, slots }) { const [visible, setVisible] useToggle(); // ... const shouldRender computed(() visible.value || !props.lazyRender); // ... }这里useToggle()不传参数初始状态为false不可见/不渲染当月份滚动进入可视区域时调用setVisible(true)将其置为可见从而触发渲染。shouldRender这一计算属性把是否已可见与是否开启懒渲染两个条件组合在一起实现了日历月份的按需渲染、优化首屏性能。这个用例展示了useToggle在组件库内部承担布尔状态控制器的真实角色。场景二Barrage 弹幕的播放/暂停控制在弹幕组件 packages/vant/src/barrage/demo/index.vue 的演示代码中script setup langts import { useToggle } from vant/use; const [isPlay, toggle] useToggle(false); watch(isPlay, () { if (isPlay.value) videoBarrage.value?.play(); else videoBarrage.value?.pause(); }); /script演示页使用useToggle(false)管理弹幕的播放状态并通过watch监听isPlay的变化来调用弹幕实例的play()/pause()方法——这正是布尔状态驱动副作用的经典模式同一写法也被收录在 packages/vant/src/barrage/README.md 中供开发者参考。总结useToggle用最小的 API 面一个参数、一个元组返回值解决了 Vue 3 开发中最常见的布尔状态管理需求。它的三个核心特点值得记住语义化toggle()无参调用即取反代码意图一目了然类型友好as const元组返回 完整的 TypeScript 类型声明开发体验良好零成本全实现仅 10 行源码无任何额外依赖tree-shaking 友好。无论是自己项目里的显隐控制、开关状态还是阅读 Vant 组件源码时理解Calendar、Barrage等组件的行为掌握useToggle都能让你更快地上手vant/use这一整套组合式函数工具集。【免费下载链接】vantA lightweight, customizable Vue UI library for mobile web apps.项目地址: https://gitcode.com/GitHub_Trending/va/vant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

免费开源 3 分钟跑通:G-Helper 轻量替代奥创,掌控华硕笔记本性能

免费开源 3 分钟跑通:G-Helper 轻量替代奥创,掌控华硕笔记本性能

免费开源 3 分钟跑通:G-Helper 轻量替代奥创,掌控华硕笔记本性能 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

📅 2026/9/12 16:33:26
SadTalker 模型下载:checkpoints 一步到位配置指南

SadTalker 模型下载:checkpoints 一步到位配置指南

SadTalker 模型下载:checkpoints 一步到位配置指南 【免费下载链接】SadTalker [CVPR 2023] SadTalker:Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation 项目地址: https://gitcode.com/Gi…

📅 2026/9/12 16:28:26
qwen-code Auth Provider Registry:以 Provider 为统一抽象重构 API Key、OAuth 与订阅套餐认证体系

qwen-code Auth Provider Registry:以 Provider 为统一抽象重构 API Key、OAuth 与订阅套餐认证体系

qwen-code Auth Provider Registry:以 Provider 为统一抽象重构 API Key、OAuth 与订阅套餐认证体系 【免费下载链接】qwen-code An open-source AI coding agent that lives in your terminal. 项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code …

📅 2026/9/12 16:28:26
MORE NEWS

更多资讯

📰

NautilusTrader Python 指南:基于 PyO3 理解 Rust 核心之上的交易控制面

NautilusTrader Python 指南:基于 PyO3 理解 Rust 核心之上的交易控制面 【免费下载链接】nautilus_trader Production-grade Rust-native trading engine with deterministic event-driven architecture 项目地址: https://gitcode.com/GitHub_Trending/na/nauti…

📰

TradingAgents-CN 实时 PE/PB 计算实施方案:基于 30 秒行情快照的动态估值体系改造

TradingAgents-CN 实时 PE/PB 计算实施方案:基于 30 秒行情快照的动态估值体系改造 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 导…

📰

电动自行车无刷控制器固件烧录与参数标定实战指南

简介:XM.zip提供电动自行车无刷控制器(BLDC)的完整源程序代码包,面向电动自行车维修者、DIY爱好者、电机控制学习者,适合有一定单片机基础、希望深入无刷电机底层控制逻辑的读者。压缩包共11个文件,大小仅1…

📰

西门子PLC与三菱变频器MODBUS通讯实战指南

1. 项目概述在工业自动化控制系统中,PLC与变频器之间的稳定通讯是实现设备联动的关键技术基础。今天我要分享的是西门子S7-200 SMART系列PLC与三菱D700变频器通过RS485接口实现MODBUS通讯的完整实现方案。这个方案在我们工厂的物料输送系统中已经稳定运行两年多&…

📰

RK3588+M.2异构加速:端侧部署Qwen3.8-27B实战指南

1. 这不是“把大模型塞进硬盘盒”,而是端侧AI算力架构的重新定义你搜“RK3588 部署 Qwen3.8-27B”,刷出来的大多是“跑不动”“显存炸了”“量化到4bit还是OOM”的抱怨。再翻翻“M.2 接口电路”“Ae key座引脚定义”,满屏是信号完整性、PCIe …

📰

Midscene.js 上手指南:三步跑通你的第一次 AI 视觉驱动 UI 测试

Midscene.js 上手指南:三步跑通你的第一次 AI 视觉驱动 UI 测试 【免费下载链接】midscene GUI Agent for E2E Testing 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 网页上一个按钮换了样式,写好的选择器就全部失效,…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬