ブラウザだけで動作するVue 3のサンプル。以下の公式ドキュメントを参考にしました。

サンプル

Vue 3のサンプルは、このページになります。 また、このソースは以下になります。 Vue 3ではVue 2と異なり、createApp関数を使用します。また、dataの箇所は、data() { return ... } の形式にする必要があります。

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Vue3のテスト</title>
    <script src="https://unpkg.com/vue@3"></script>
</head>

<body>
    <div id="app"></div>
    <div id="basic-event">
        <!-- '@click' は、'v-on:click' にすることもできる。 -->
        <button @click="counter += 1">ボタン1</button>
        <p>ボタン1のクリック数 {{ counter }} 回</p>
    </div>
    <div id="event-with-method">
        <button @click="greet">ボタン2</button>
        <br><br>
    </div>
    <div id="multiple-event">
        <button @click="one($event), two($event)">ボタン3 (+3)</button>
        <p>ボタン3のクリック数 {{ counter }} 回。 合計は {{ sum }}</p>
    </div>

    <script>
        const app = Vue.createApp({
            template: '<p>{{msg}}</p><br>',
            data() {
                return { msg: 'これはVue3のテストです。' };
            }
        });
        app.mount('#app');

        // ボタン1: Listening to Events
        const bt1 = Vue.createApp({
            data() {
                return {
                    counter: 0
                }
            }
        })
        bt1.mount('#basic-event');

        // ボタン2: Method Event Handlers
        Vue.createApp({
            data() {
                return {
                    name: 'Vue.js'
                }
            },
            methods: {
                greet(event) {
                    // `this` inside methods points to the current active instance
                    alert('Hello ' + this.name + '!')
                    // `event` is the native DOM event
                    if (event) {
                        alert(event.target.tagName)
                    }
                }
            }
        }).mount('#event-with-method')

        // ボタン3: Multiple Event Handlers
        Vue.createApp({
            data() {
                return {
                    counter: 0,
                    sum: 0
                }
            },
            methods: {
                one(event) {
                    this.counter += 1;
                },
                two(event) {
                    this.sum += 3;
                }
            }
        }).mount('#multiple-event')
    </script>
</body>

</html>

Vue 2のサンプルは、以下になります。

Reactで同じ機能を実装したサンプルは、以下になります。

フィルター

Vue 3では、フィルターが使用できなくなりました。代わりに関数をcomputedで定義して使用します。

 <script src="https://unpkg.com/vue@3"></script>
 <div id="app"></div>
 
 <script>
     function showPrice(value) {
         return value + ' 円';
     }
 
     var items = [
         {
             name: 'みかん',
             price: 100,
             quantity: 2
         },
         {
             name: 'りんご',
             price: 200,
             quantity: 3
         },
     ];
 
     var app = Vue.createApp({
         template: `
             <dl v-for="item in items">
                 <dt>{{ item.name }}: {{ price(item.price) }} x {{ item.quantity }} = {{ price(sum(item)) }}</dt>
             </dl>
             <p>合計: {{ total }}</p>
         `,
         data() {
             return { items: items };
         },
         computed: {
             price() {
                 return function (item) {
                     return showPrice(item);
                 }
             },
             sum: function () {
                 return function (item) {
                     return item.price * item.quantity;
                 }
             },
             total: function () {
                 const value = this.items.reduce(function (sum, item) {
                     return sum + (item.price * item.quantity);
                 }, 0)
                 return showPrice(value)
             },
         }
     })
     app.mount('#app');
 </script>
この例では、computedで3つの関数を定義して、テンプレートでそれらを使用しています。
Vue 2 の場合、price関数をフィルタで定義すると、以下のようになります。 これをVue 3で実行すると、filterの定義は無視されてしまいます。
          ...
          data() { ... },
          filters: {
              price: function (value) {
                  return showPrice(item);
              }
          },
          computed: {
          ...

価格表示用関数showPriceは、computedで定義せずに、外部で定義していますが、これは、以下のような外部モジュールとすることもできます。 ただし、importを使用する場合、scriptタグに tyep="module" を指定する必要があります。

<script type="module">
    import { showPrice } from 'http://localhost/js/vue3_lib.js';

    var items = [
        ...

</script>
注意 IEでは、importを使えません。