ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

在 airi 前端工程中用好 VueUse logicOr:用响应式 OR 条件组合 ref 与派生逻辑

在 airi 前端工程中用好 VueUse logicOr:用响应式 OR 条件组合 ref 与派生逻辑 在 airi 前端工程中用好 VueUse logicOr用响应式 OR 条件组合 ref 与派生逻辑【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airilogicOr是 VueUsevueuse/math提供的一组“针对 ref 的响应式布尔运算”工具之一它把若干 ref、普通值或 getter 折叠成一个ComputedRefboolean让OR逻辑以声明式、可复用的方式融入 Vue 的响应式系统。airi 的多个 Web / Electron 前端应用都通过 pnpm catalog 统一依赖vueuse/core本指南以仓库中收录的 logicOr API 参考文档 为主体结合同类逻辑函数logicAnd/logicNot讲清其签名、运行语义与组合姿势帮助你在条件监听、UI 门控、可用性判定等场景里替代手写重复逻辑。读完你即可准确使用logicOr并能举一反三地把整个逻辑运算族应用到自己的 Vue 3 组件中。一、定位Math类别下的响应式布尔运算在 VueUse 官方分类中logicOr属于Math类别与logicAnd、logicNot互为同族工具SKILL.md 表中三者的描述分别是logicAndANDcondition for refs对 ref 做 AND 运算logicOrORconditions for refs对 ref 做 OR 运算logicNotNOTcondition for ref对单个 ref 取反。在 SKILL.md 的函数总表中它们的Invocation标注均为EXTERNAL含义是仅当项目已经安装所需的扩展依赖此处即vueuse/math时才可自动选用未安装时应先权衡确实需要再安装不能擅自引入外部依赖。这与vueuse/core内的函数多为AUTO可自动使用形成区分是实现时的重要纪律。该 skill 目录下的各份 reference 文档由上游 VueUse 仓库同步而来见 SYNC.md 中的源路径与 Git SHA 记录因此本文中的签名、别名与用法均可视为对官方 API 的一次精确本地化摘录。二、函数签名与类型语义logicOr的完整类型声明如下摘自 logicOr.md/** * OR conditions for refs. * * see https://vueuse.org/logicOr * * __NO_SIDE_EFFECTS__ */ export declare function logicOr( ...args: MaybeRefOrGetterany[] ): ComputedRefboolean /** deprecated use logicOr instead */ export declare const or: typeof logicOr拆开看其中有三个关键信息点可变参数...args: MaybeRefOrGetterany[]logicOr接受任意数量的操作数每个操作数既可以是ref、也可以是普通值还可以是返回值的 getter 函数即MaybeRefOrGetter联合类型。这意味着不必预先把所有输入都“ref 化”直接传原始布尔值或() someState都是合法的。返回值固定为ComputedRefboolean结果是一个惰性求值的计算属性引用读取.value时才执行布尔判断并且当任一依赖的 ref / getter 发生变化时会自动重算。因此它天然可作为其他computed、watch或模板表达式的输入可无缝嵌进现有响应式数据流。__NO_SIDE_EFFECTS__标注这是给打包器/编译器看的效果标记提示该函数调用无副作用可在摇树tree-shaking与调用裁剪时被安全处理。废弃别名or早期版本通过or暴露同一函数签名处已用deprecated标注并建议“uselogicOrinstead”。新代码应统一书写为logicOr以消除歧义并避免未来版本移除别名时的迁移成本。三、基础用法让whenever只响应一次状态翻转文档给出的示例把logicOr与vueuse/core的whenever组合使用import { whenever } from vueuse/core import { logicOr } from vueuse/math const a ref(true) const b ref(false) whenever(logicOr(a, b), () { console.log(either a or b is truthy!) })whenever是“当值变为 truthy 时触发一次”的 watch 简写其完整 API 见 whenever.md。这里logicOr(a, b)返回的ComputedRef在a、b任一变为 truthy 时其值会从false翻转为true于是回调只在条件由假变真的那一刻执行一次此后a、b再变化例如从true变回false又变回true会再次触发翻转。这一组合的实战价值在于把“多个互相独立的状态源”收敛成一个“统一触发条件”代码里既不需要手写a || b的临时表达式也不需要在多处 watch 里重复判断。若用普通watch(() a.value || b.value)whenever的逻辑同样成立但logicOr让意图这是 OR 条件判断以函数名直接显性表达可读性更好。四、运行语义聚合求值与依赖收集从文档描述的“ORconditions for refs”出发可以推断logicOr的实现语义与数组some一致在计算时对全部操作数做逐一的 truthy 求值只要有一个为真结果即为true。基于这套语义使用时需要注意求值是惰性的与原生||类似实现上可按顺序短路一旦遇到 truthy 操作数即可确定结果对内部每个操作数都会自动执行toValue()解包因此传 ref 也好、传 getter 也好写起来形态统一。结果是响应式的引用而非普通布尔值用console.log(logicOr(a, b))打印到的是 ref 对象必须访问.value而在模板v-if、v-show中可直接传整个返回值Vue 会自动解包。操作数可以是任意类型truthy 判断遵循 JavaScript 规则0、、null、undefined、NaN均为假所以logicOr不只用于布尔 ref也能用来表达“几个可空值中至少有一个已就绪”这类判定。五、进阶组合把布尔运算“管道化”表达复杂状态由于三个函数都返回ComputedRefboolean它们的输出可以直接作为彼此的输入从而像搭积木一样组合出复杂门控逻辑。例如只有当“网络在线”且“已授权”或“处于调试模式”时才放行某个动作import { computed } from vue import { useOnline } from vueuse/core import { logicAnd, logicNot, logicOr } from vueuse/math const online useOnline() const authorized ref(false) const debugMode ref(false) // 手工消费直接塞给 computed 或模板 const canProceed computed(() logicAnd(online, logicOr(authorized, debugMode)).value) // 或者不建临时 computed直接把组合结果交给 watch/whenever whenever(logicNot(logicOr(authorized, debugMode)), () { // 两个入口都关闭时进入兜底分支 })在模板中的典型形态则更为简洁——v-iflogicOr(isLoading, isRetrying)直接表达“加载中或重试中”的渲染门控无需在script setup里再定义一个computed。这正是该函数族提倡的“用组合式函数表达派生状态减少自制散落逻辑”的思路与整个 vueuse-functions skill 强调的“优先 VueUse composables 而非手写样板代码”一脉相承。六、在 airi 前端工程中的应用土壤airi 是一个覆盖 Web / macOS / Windows 与 Electron 桌面前端的多应用 monorepo其中 Vue 技术栈应用普遍以 pnpm catalog 依赖 VueUse。在多个应用的 package.json、stage-pocket、stage-tamagotchi、ui-server-auth 与 component-calling 中均可看到vueuse/core: catalog:的统一版本声明仓库内各类页面与组合式文件也大量使用vueuse/core的whenever、useTimeoutFn、computedAsync、useBroadcastChannel等 API。在这些工程里logicOr的典型落点并不难想象以下为面向此类状态的通用设计建议而非对仓库既有代码的陈述能力可用性判定多个开关/权限状态如麦克风、摄像头、授权标记、连接状态任一可用即渲染对应入口按钮UI 面板门控v-if中把“面板打开或正在拖拽中”这类多条件 OR 表达收敛为单一可读谓词降级分支触发与logicNot搭配在“所有输入源都不可用”时统一切到兜底提示。需要留意的是logicOr位于vueuse/mathairi 各应用当前依赖声明中可见的是vueuse/core按 skill 的EXTERNAL约定真正落码前应先确认是否已安装vueuse/math否则应优先用手写computed(() a.value || b.value)替代避免为一个布尔聚合引入整包依赖。这也是仓库内 SKILL.md 关于Invocation规则的显式要求。七、相关文档与对照阅读围绕logicOr可对照阅读仓库内同族、相关的 API 参考构成完整的逻辑运算知识闭环logicAnd.mdAND条件仅当全部操作数为真时结果为真与logicOr的“任一为真”恰好互补同样提供废弃别名and。logicNot.mdNOT取反接受单个MaybeRefOrGetter配合上述两者可表达任意组合逻辑。whenever.md文档示例中的核心搭档负责在“条件翻转为真”时触发副作用是消费logicOr返回值最常见的方式。三者签名同构MaybeRefOrGetter入参 ComputedRefboolean出参可以自由嵌套使用时牢记“结果要读.value、别名or已废弃、vueuse/math为 EXTERNAL 依赖”三条要点即可在 airi 或任何 Vue 3 / Nuxt 3 工程里安全、优雅地落地响应式布尔组合逻辑。【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表