<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>逻辑抽象 on ZiYang FrontEnd Interview</title><link>https://fe-interview.pangcy.cn/tags/%E9%80%BB%E8%BE%91%E6%8A%BD%E8%B1%A1/</link><description>Recent content in 逻辑抽象 on ZiYang FrontEnd Interview</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 06 Mar 2025 13:07:39 +0800</lastBuildDate><atom:link href="https://fe-interview.pangcy.cn/tags/%E9%80%BB%E8%BE%91%E6%8A%BD%E8%B1%A1/index.xml" rel="self" type="application/rss+xml"/><item><title>组合式API逻辑复用实现</title><link>https://fe-interview.pangcy.cn/docs/framework/vue3/vue3-10/</link><pubDate>Tue, 04 Mar 2025 07:00:31 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/framework/vue3/vue3-10/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>本题主要考核以下核心能力维度：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>组合式API机制理解&lt;/strong>：考察对Vue3组合式API设计理念的掌握，包括逻辑拆分与复用策略&lt;/li>
&lt;li>&lt;strong>响应式系统运用&lt;/strong>：检验ref/reactive等响应式API的正确使用，及在组合函数中的值传递&lt;/li>
&lt;li>&lt;strong>生命周期整合&lt;/strong>：评估在自定义hook中正确绑定/清除副作用（如事件监听、异步请求）&lt;/li>
&lt;li>&lt;strong>代码抽象能力&lt;/strong>：验证业务逻辑解耦能力，包括参数处理、状态暴露、错误边界等工程化实践&lt;/li>
&lt;/ol>
&lt;p>具体技术评估点：&lt;/p>
&lt;ul>
&lt;li>组合函数的命名规范与结构&lt;/li>
&lt;li>响应式数据在组件间的状态保持&lt;/li>
&lt;li>生命周期钩子的正确绑定&lt;/li>
&lt;li>异步操作的竞态处理（如请求取消）&lt;/li>
&lt;li>TypeScript类型支持实现&lt;/li>
&lt;/ul>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点">关键知识点 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>Composition API Design &amp;gt; 响应式系统 &amp;gt; 生命周期管理 &amp;gt; TypeScript类型推导&lt;/p>
&lt;h3 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>组合函数本质是返回响应式状态+函数的闭包封装，利用Vue的setup()执行上下文实现逻辑复用。通过ref维持响应式引用，在onMounted等钩子中绑定原生事件或异步操作，通过onUnmounted进行资源清理，避免内存泄漏。&lt;/p>
&lt;p>典型错误包括：&lt;/p>
&lt;ol>
&lt;li>直接返回解构对象导致响应式丢失&lt;/li>
&lt;li>未在卸载阶段移除事件监听&lt;/li>
&lt;li>异步回调中使用过期状态&lt;/li>
&lt;/ol>
&lt;h3 id="常见误区">常见误区 &lt;a href="#%e5%b8%b8%e8%a7%81%e8%af%af%e5%8c%ba" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ul>
&lt;li>在组合函数内直接修改DOM（违反响应式原则）&lt;/li>
&lt;li>忘记处理异步操作的错误状态&lt;/li>
&lt;li>多个组件实例共享同一响应式引用（未使用函数式返回）&lt;/li>
&lt;/ul>
&lt;h2 id="问题解答">问题解答 &lt;a href="#%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>通过组合函数封装逻辑需遵循以下步骤：&lt;/p>
&lt;ol>
&lt;li>创建以&lt;code>use&lt;/code>开头的函数，使用ref/reactive封装状态&lt;/li>
&lt;li>在setup阶段执行副作用（如事件绑定）&lt;/li>
&lt;li>返回组件可用的响应式状态与方法&lt;/li>
&lt;li>使用toRefs保持解构后响应式&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>鼠标跟踪器示例&lt;/strong>：&lt;/p>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="31f867c" class="language-javascript ">
 &lt;code>import { ref, onMounted, onUnmounted } from &amp;#39;vue&amp;#39;

export function useMouse() {
 const x = ref(0)
 const y = ref(0)
 
 const update = (e) =&amp;gt; {
 x.value = e.pageX
 y.value = e.pageY
 }

 onMounted(() =&amp;gt; {
 window.addEventListener(&amp;#39;mousemove&amp;#39;, update)
 })

 onUnmounted(() =&amp;gt; {
 window.removeEventListener(&amp;#39;mousemove&amp;#39;, update)
 })

 return { x, y }
}&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;p>&lt;strong>API请求示例&lt;/strong>：&lt;/p></description></item></channel></rss>