JSFiddle - React, Tailwind, and code Playground

by skirtle

HTML

<script src="https://unpkg.com/[email protected]/dist/vue.global.js"></script>
<div id="app"></div>

CSS

.red {
  color: red;
}

JavaScript

const ListItem = {
  template: `
    <li><button @click="onClick">{{ format(text) }}</button></li>
  `,
  
  inheritAttrs: false,
  emits: ['chosen'],
  props: ['text'],
  
  methods: {
  	format (value) {
    	console.log('rendering: ' + value)
    
      return value
    },
  
    onClick () {
      console.log(this.$attrs)
      this.$emit('chosen')
    }
  }
}

Vue.createApp({
  template: `
    <div :class="{ red: mode }">
      <button @click="mode = !mode">Click me</button>
	    <ul>
  	    <list-item
    	    v-for="item in items"
      	  :text="item"
        	@chosen="onChosen(item)"
				/>
    	</ul>
		</div>
  `,
  
  components: {
    ListItem
  },
  
  data () {
    return {
      mode: false,
      items: ['Red', 'Green', 'Blue', 'Yellow']
    }
  },
  
  beforeUpdate () {
    console.log('updating...')
  },
  
  methods: {
  	onChosen (item) {
      console.log('chosen: ' + item)
    }
  }
}).mount('#app')