<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: scars</title>
    <description>The latest articles on DEV Community by scars (@scars377).</description>
    <link>https://dev.to/scars377</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F465116%2Fab5e35f7-0efb-45d6-8b23-e1b587b15764.JPG</url>
      <title>DEV Community: scars</title>
      <link>https://dev.to/scars377</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/scars377"/>
    <language>en</language>
    <item>
      <title>Vue 3 Migrations</title>
      <dc:creator>scars</dc:creator>
      <pubDate>Tue, 08 Sep 2020 15:23:29 +0000</pubDate>
      <link>https://dev.to/scars377/vue-3-migrations-3no3</link>
      <guid>https://dev.to/scars377/vue-3-migrations-3no3</guid>
      <description>&lt;p&gt;&lt;a href="https://v3.vuejs.org/guide/migration/introduction.html"&gt;Vue 3 migration introduction&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  New Features
&lt;/h1&gt;

&lt;p&gt;Composition API = hooks&lt;br&gt;
Teleport = Portal&lt;br&gt;
Fragments = Fragments&lt;br&gt;
&lt;code&gt;emits&lt;/code&gt; Component Option = 定義 emit 的事件&lt;br&gt;
&lt;code&gt;v-model&lt;/code&gt; modifiers = 可以在 v-model 用 mod&lt;br&gt;
createRenderer = can create custom renderers&lt;/p&gt;

&lt;p&gt;以上不討論&lt;/p&gt;



&lt;p&gt;比較常用的&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Global Vue -&amp;gt; app instance
&lt;/li&gt;
&lt;li&gt;
Global Vue methods -&amp;gt; named export
&lt;/li&gt;
&lt;li&gt;
Render function h -&amp;gt; named export
&lt;/li&gt;
&lt;li&gt;
v-model &amp;amp; .sync
&lt;/li&gt;
&lt;li&gt;
Functional component
&lt;/li&gt;
&lt;li&gt;
Async components
&lt;/li&gt;
&lt;li&gt;
data is function
&lt;/li&gt;
&lt;li&gt;
Watch
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;比較不常用的&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom elements&lt;/li&gt;
&lt;li&gt;is &amp;amp; v-is&lt;/li&gt;
&lt;li&gt;$scopedSlots&lt;/li&gt;
&lt;li&gt;Attributes coercion strategy&lt;/li&gt;
&lt;li&gt;v-directive&lt;/li&gt;
&lt;li&gt;Transition classes&lt;/li&gt;
&lt;li&gt;outerHTML -&amp;gt; innerHTML&lt;/li&gt;
&lt;li&gt;keyCode&lt;/li&gt;
&lt;li&gt;\$on, \$off, \$once&lt;/li&gt;
&lt;li&gt;Filters&lt;/li&gt;
&lt;li&gt;Inline template&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  Breaking Changes
&lt;/h1&gt;
&lt;h2&gt;
  
  
  # Global Vue -&amp;gt; app instance
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 2.x&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;//3.x&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createApp&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createApp&lt;/span&gt;&lt;span class="p"&gt;({});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;2.x Global API&lt;/th&gt;
&lt;th&gt;3.x Instance API (app)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vue.config&lt;/td&gt;
&lt;td&gt;app.config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vue.config.productionTip&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vue.config.ignoredElements&lt;/td&gt;
&lt;td&gt;app.config.isCustomElement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vue.component&lt;/td&gt;
&lt;td&gt;app.component&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vue.directive&lt;/td&gt;
&lt;td&gt;app.directive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vue.mixin&lt;/td&gt;
&lt;td&gt;app.mixin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vue.use&lt;/td&gt;
&lt;td&gt;app.use&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  # Global Vue methods -&amp;gt; named export
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 2.x&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nextTick&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;

&lt;span class="c1"&gt;// 3.x&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;nextTick&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="nx"&gt;nextTick&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Effected&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Vue.nextTick&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Vue.observable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;replaced by &lt;code&gt;reactive&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Vue.version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Vue.compile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;only in full builds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Vue.set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;only in compat builds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Vue.delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;only in compat builds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  # Render function &lt;code&gt;h&lt;/code&gt; -&amp;gt; named export
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  # v-model &amp;amp; .sync
&lt;/h2&gt;

&lt;p&gt;統一介面&lt;br&gt;
&lt;code&gt;myProp.sync&lt;/code&gt; 語法移除，改為 &lt;code&gt;v-model:myProp&lt;/code&gt;&lt;br&gt;
&lt;code&gt;v-model&lt;/code&gt; 語法糖改為等同於 &lt;code&gt;v-model:modelValue&lt;/code&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;shorthand&lt;/th&gt;
&lt;th&gt;prop&lt;/th&gt;
&lt;th&gt;event&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2.x&lt;/td&gt;
&lt;td&gt;v-model&lt;/td&gt;
&lt;td&gt;value&lt;/td&gt;
&lt;td&gt;input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;:myProp.sync&lt;/td&gt;
&lt;td&gt;myProp&lt;/td&gt;
&lt;td&gt;update:myProp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.x&lt;/td&gt;
&lt;td&gt;v-model&lt;/td&gt;
&lt;td&gt;modelValue&lt;/td&gt;
&lt;td&gt;update:modelValue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v-model:myProp&lt;/td&gt;
&lt;td&gt;myProp&lt;/td&gt;
&lt;td&gt;update:myProp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  # Functional component
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;template functional&amp;gt;&lt;/code&gt; 跟 &lt;code&gt;{ functional: true }&lt;/code&gt; 被移除&lt;br&gt;
functional component 對效能幾乎沒有影響，可以不用刻意標示&lt;/p&gt;

&lt;p&gt;真的要做 functional component 的話只能以匯出 function 的方式&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DynamicHeading&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`h&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;level&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attrs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slots&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;DynamicHeading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;level&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;DynamicHeading&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;(但這樣有比較輕鬆嗎)&lt;/p&gt;

&lt;h2&gt;
  
  
  # Async components
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;非同步組件必須用 &lt;code&gt;defineAsyncComponent&lt;/code&gt; 包起來&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;component&lt;/code&gt; 屬性改名為 &lt;code&gt;loader&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;loader 函式必須回傳 Promise
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 3.x&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineAsyncComponent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="c1"&gt;// Async component without options&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;asyncPage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;defineAsyncComponent&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./NextPage.vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;// Async component with options&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;asyncPageWithOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;defineAsyncComponent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;loader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./NextPage.vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;errorComponent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ErrorComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;loadingComponent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;LoadingComponent&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 3.x&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;asyncComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;defineAsyncComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  # &lt;code&gt;data&lt;/code&gt; 現在一律必須是 function
&lt;/h2&gt;

&lt;p&gt;很好&lt;/p&gt;

&lt;h2&gt;
  
  
  # Watch
&lt;/h2&gt;

&lt;p&gt;不再支援 path 作為 watcher (例如 &lt;code&gt;'$store.state.count'()&lt;/code&gt;)&lt;br&gt;
必須透過 computed&lt;/p&gt;


&lt;h1&gt;
  
  
  Breaking Changes (比較不常用的東西)
&lt;/h1&gt;
&lt;h2&gt;
  
  
  # Custom elements
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Vue.ignoredElements&lt;/code&gt; 要改為 &lt;code&gt;vue-loader&lt;/code&gt; 的 options, 或者 &lt;code&gt;app.config.isCustomElement&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  # is &amp;amp; v-is
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;is&lt;/code&gt; 現在只能用在 &lt;code&gt;&amp;lt;component&amp;gt;&lt;/code&gt; 上&lt;br&gt;
在 custom component (Web Component API) 上要換成 &lt;code&gt;v-is&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  # $scopedSlots
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;this.$scopedSlots&lt;/code&gt; 都要改成 &lt;code&gt;this.$slots&lt;/code&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  # Attributes coercion strategy
&lt;/h2&gt;

&lt;p&gt;不用管&lt;br&gt;
簡單來說如果 v-bind 一個 attribute 到一個 element 上&lt;br&gt;
2.x 如果值是 &lt;code&gt;null&lt;/code&gt; &lt;code&gt;undefined&lt;/code&gt; &lt;code&gt;false&lt;/code&gt; 那屬性會從元素被移除，但對於某些特殊屬性如 draggable 又不太一致&lt;br&gt;
3.x 統一為 &lt;code&gt;null&lt;/code&gt; &lt;code&gt;undefined&lt;/code&gt; 會被移除，其他都會照原本值 render 出來&lt;/p&gt;
&lt;h2&gt;
  
  
  # v-directive
&lt;/h2&gt;

&lt;p&gt;當定義 directive 的時候 (例如寫一個 &lt;code&gt;v-tooltip&lt;/code&gt; 時)，lifecycle hooks 的命名改了，改成跟一般 component 的 lifecycle 一樣&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;2.x&lt;/th&gt;
&lt;th&gt;3.x&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;bind&lt;/td&gt;
&lt;td&gt;beforeMount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inserted&lt;/td&gt;
&lt;td&gt;mounted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;beforeUpdate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;update&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;componentUpdated&lt;/td&gt;
&lt;td&gt;updated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;beforeUnmount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unbind&lt;/td&gt;
&lt;td&gt;unmounted&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  # Transition classes
&lt;/h2&gt;

&lt;p&gt;改名&lt;br&gt;
&lt;code&gt;v-enter&lt;/code&gt; -&amp;gt; &lt;code&gt;v-enter-from&lt;/code&gt;&lt;br&gt;
&lt;code&gt;v-leave&lt;/code&gt; -&amp;gt; &lt;code&gt;v-leave-from&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  # outerHTML -&amp;gt; innerHTML
&lt;/h2&gt;

&lt;p&gt;2.x 會把指定的 root element 透過 outerHTML 整個換掉&lt;br&gt;
3.x 會用 innerHTML 塞裡面&lt;/p&gt;
&lt;h2&gt;
  
  
  # keyCode
&lt;/h2&gt;

&lt;p&gt;直接以數字 keyCode 作 modifier 被移除&lt;br&gt;
但還是可以用鍵名例如 &lt;code&gt;@keyup.delete&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// removed&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;keyup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;112&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;showHelpText&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  # \$on, \$off, \$once
&lt;/h2&gt;

&lt;p&gt;移除．vue instance 不再實作 event emitter&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// removed&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;some-event&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;讚&lt;/p&gt;

&lt;h2&gt;
  
  
  # Filters
&lt;/h2&gt;

&lt;p&gt;移除．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// removed&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;accountBalance&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;currencyUSD&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;超讚，討厭 filter&lt;/p&gt;

&lt;h2&gt;
  
  
  # Inline template
&lt;/h2&gt;

&lt;p&gt;移除.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// removed&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;my&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="nx"&gt;inline&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;These&lt;/span&gt; &lt;span class="nx"&gt;are&lt;/span&gt; &lt;span class="nx"&gt;compiled&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;s own template.&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;Not parent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="nx"&gt;transclusion&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/my-component&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;這什麼從來沒看過&lt;/p&gt;

</description>
      <category>vue</category>
    </item>
  </channel>
</rss>
