JSFiddle - React, Tailwind, and code Playground

by kurotanshi

HTML

<script src="https://unpkg.com/vue@next"></script>
<div id="app">
  <input type="text" v-model="msg">

  <list-component></list-component>
</div>

SCSS

#app {
  display: block;
  padding: 1rem;
  padding-top: 2rem;
  font-size: 1rem;
}

input {
  font-size: 1rem;
  padding: 5px;
  margin-bottom: 1rem;
  width: 300px;
}

li {
  display: block;
  width: 90%;
  height: 50px;
  padding: 5px;
  border: 1px solid #000;
  margin-bottom: 10px;
}

JavaScript

const app = Vue.createApp({
  data() {
    return {
      msg: 'Hello App!'
    }
  },
  provide() {
    // 將 this.msg 透過 provide 傳遞出去
    return {
      provideMsg: this.msg
    };
  }
});

app.component('list-component', {
  template: `
  	<ul>
    	<li v-for="i in 3">
      	{{ i }}
     		<list-item />
			</li>
    </ul>`,
  components: {
    'list-item': {
      // 在子、孫元件中,加上 inject 屬性即可取得 provideMsg
      inject: ['provideMsg'],
      template: `<div>{{ provideMsg }}!</div>`
    }
  }
});

app.mount('#app');