JSFiddle - React, Tailwind, and code Playground

by imall

HTML

<script src="https://unpkg.com/[email protected]/dist/vue.global.js"></script>
  <div id="app">
    <my-component :count="count" @update="updateCount"></my-component>
  </div>

JavaScript

const app = Vue.createApp({
   setup() {
     const count = Vue.ref(0);
     const updateCount = (data) => {
       console.log(data);
       count.value += data;
     };
     return {
       count,
       updateCount,
     };
   },
 });

 app.component("my-component", {
   template: `
        <div>{{count}}</div>
        <button @click="updateNumber">增加</button>
      `,
   props: ["count"],
   // 宣告一個 emits
   emits: ["update"],
   // 在 setup 加一個 cxt 參數(名稱也可以隨意定義,但官網這麼寫,我就照寫了)
   setup(props, ctx) {
     const updateNumber = () => {
       // 假設固定要把 props.count + 1 的數值傳回外層
       const data = props.count + 1;
       // 這句可以執行 emit 方法
       ctx.emit("update", data);
     };
     return {
       updateNumber,
     };
   },
 });

 app.mount("#app");