<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Vue on Bigshans&#39; Blog</title>
    <link>https://bigshans.github.io/categories/vue/</link>
    <description>Recent content in Vue on Bigshans&#39; Blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>bigshans</copyright>
    <lastBuildDate>Wed, 04 Mar 2026 19:46:28 +0800</lastBuildDate>
    <atom:link href="https://bigshans.github.io/categories/vue/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Vue 的响应式原理</title>
      <link>https://bigshans.github.io/post/vue_s_reactive/</link>
      <pubDate>Wed, 04 Mar 2026 19:46:28 +0800</pubDate>
      <guid>https://bigshans.github.io/post/vue_s_reactive/</guid>
      <description>&lt;p&gt;Vue 3 使用 &lt;code&gt;Proxy&lt;/code&gt; 是一大创举，它成功解决了 Vue 2&#xA;无法追踪新增属性的问题。不过，仅仅是如此吗？不如我们用简单的代码实现一个&#xA;&lt;code&gt;reactive&lt;/code&gt; 看看。&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb1&#34;&gt;&lt;pre class=&#34;sourceCode javascript&#34;&gt;&lt;code class=&#34;sourceCode javascript&#34;&gt;&lt;span id=&#34;cb1-1&#34;&gt;&lt;a href=&#34;#cb1-1&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;&lt;span class=&#34;kw&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fu&#34;&gt;reactive&lt;/span&gt;(target) {&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-2&#34;&gt;&lt;a href=&#34;#cb1-2&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;  &lt;span class=&#34;cf&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kw&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;bu&#34;&gt;Proxy&lt;/span&gt;(target&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; {&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-3&#34;&gt;&lt;a href=&#34;#cb1-3&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;get&lt;/span&gt;(target&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; key&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; recevier) {&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-4&#34;&gt;&lt;a href=&#34;#cb1-4&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;      &lt;span class=&#34;cf&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;bu&#34;&gt;Reflect&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fu&#34;&gt;get&lt;/span&gt;(target&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; key&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; recevier)&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-5&#34;&gt;&lt;a href=&#34;#cb1-5&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;    }&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-6&#34;&gt;&lt;a href=&#34;#cb1-6&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;    &lt;span class=&#34;kw&#34;&gt;set&lt;/span&gt;(target&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; key&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; value&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; recevier) {&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-7&#34;&gt;&lt;a href=&#34;#cb1-7&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;      &lt;span class=&#34;cf&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;bu&#34;&gt;Reflect&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fu&#34;&gt;set&lt;/span&gt;(target&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; key&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; value&lt;span class=&#34;op&#34;&gt;,&lt;/span&gt; recevier)&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-8&#34;&gt;&lt;a href=&#34;#cb1-8&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;    }&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-9&#34;&gt;&lt;a href=&#34;#cb1-9&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;  })&lt;span class=&#34;op&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-10&#34;&gt;&lt;a href=&#34;#cb1-10&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;这里，&lt;code&gt;Reflect&lt;/code&gt; 和 &lt;code&gt;Proxy()&lt;/code&gt;&#xA;是配套的，等同于我们直接对 &lt;code&gt;target[key]&lt;/code&gt; 进行操作，但用&#xA;&lt;code&gt;Reflect&lt;/code&gt; 更加方便，也更加安全。我们可以通过在拦截器层面增加&#xA;&lt;code&gt;console.log()&lt;/code&gt; 来查看效果。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vue 3.2 &lt;script setup&gt; 摘要</title>
      <link>https://bigshans.github.io/post/vue3_2-setup/</link>
      <pubDate>Thu, 26 Aug 2021 15:43:34 +0800</pubDate>
      <guid>https://bigshans.github.io/post/vue3_2-setup/</guid>
      <description>&lt;p&gt;在 Vue 3.2 发布的内容中，最主要内容就是 &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt; 。 &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt; 想必大家都有使用过，跟当初作为实验特性不同，这次正式发布还是有很多的修改的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;废除-usecontext&#34;&gt;废除 &lt;code&gt;useContext()&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;p&gt;原先获取全局 &lt;code&gt;ctx&lt;/code&gt; 的方法就是 &lt;code&gt;useContext()&lt;/code&gt; ，现在不行了。 Vue 还是希望用户摆脱全局变量的使用，进而使用 &lt;code&gt;useXXX&lt;/code&gt; 代替。利弊各有吧，总体来说利大于弊。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
