Vue 3.0 changes and how to incorporate them into your app

Vue is options based

Functions API

Syntax of Vue 3 is changing inspired by React Hooks

 
 
 
 
 
 
 
 
 
 
 
 

Composition API

  • New API brings advanced features
  • Tree shakable hence more lightweight
  • it won't break anything in your Vue 2.x apps, as the new API is 100% compatible with the current syntax, which won't be deprecated any time soon.
 
 
 
 
 
 
 
 
 
 
 
 

Composition api in components

export default {
  setup() {

    // reactive state
    const state = reactive({
        count: 0,
        counterPowerOf2
    })

        // computed prop
    const counterPowerOf2 = computed(() => Math.pow(state.count, 2)) 


    function increment() {
        state.count++
    }


    function decrement() {
        state.count--
    }

    // expose to template
    return {
      increment,
      decrement,
      state
    }
  }
}

Reusability

function useCounter(initialCounterState, power){
    const count = ref(initialCounterState)
    const counterPowerOf2 = computed(() => Math.pow(count.value, power)) 
    function increment() {
        count.value++
    }
    function decrement() {
        count.value--
    }
    return {
        count, 
        counterPowerOf2,
        increment,
        decrement
    }
}

export default {
  setup() {
    const { state, increment, decrement, counterPowerOf2 } = useCounter(0, 2);
    return {
      state,
      increment,
      counterPowerOf2,
      decrement
    };
  }
}
new Vue({
  beforeCreate () {

  },
  setup () {
    
  },
  created () {
	
  }
})
export default {
  setup() {
    const { count, increment, decrement, counterPowerOf2 } = useCounter(0, 2);
    return {
      count,
      increment,
      counterPowerOf2,
      decrement
    };
  },
  mounted(){
    this.count = 40;
    this.increment()
  }
}
export default {
  setup() {
    const state = reactive({
      count: 0
    })
    return {
      state
    }
  }
}

reactive()

reactive(obj) will return a new object that looks exactly the same as obj, but any mutation to the new object will be tracked.

It's implemented with Proxies so now we can add new properties to it instead of Vue.set like previously

ref()

reactive obj that has .value property and is fully reactive. Way better to use than reactive

ref()

reactive obj that has .value property and is fully reactive. Way better to use than reactive

computed(() => {})

creates a computed value

Lifecycle Hooks

    const { count, increment, decrement, counterPowerOf2 } = useCounter(0, 2);
    onMounted(() => {
        count.value = 40;
        increment()
    })

just functions

Methods

Watch

watching the reactive value

const searchInput = ref("")
const results = ref(0);

watch(() => {
  results.value = eventApi.getEventCount(searchInput.value);
});

How we can try it

Install it as a plugin to Vue 2

 
 
 
 
 
 
 
 
 
 
 
 
yarn add @vue/composition-api
import Vue from 'vue';
import VueCompositionApi from '@vue/composition-api';

Vue.use(VueCompositionApi);

Why use Composition API?

Can be used outside of components

 
 
 
 
 
 
 
 
 
 
 
 

Code organization

 
 
 
 
 
 
 
 
 
 
 
 

Logic reuse

 
 
 
 
 
 
 
 
 
 
 
 

Tree shaking for non major Vue projects

 
 
 
 
 
 
 
 
 
 
 
 

Improved TS support

 
 
 
 
 
 
 
 
 
 
 
 

Composition

 
 
 
 
 
 
 
 
 
 
 
 

flexible

 
 
 
 
 
 
 
 
 
 
 
 

performance

 
 
 
 
 
 
 
 
 
 
 
 

Code organization

 
 
 
 
 
 
 
 
 
 
 
 

Check it out here:

 
 
 
 
 
 
 
 
 
 
 
 

Thanks

  @VladimirNovick

Vue 3.0 changes and how to incorporate them into your Vue apps

By vladimirnovick

Vue 3.0 changes and how to incorporate them into your Vue apps

Custom directives, Testing, Provide and Inject, Architecture patterns

  • 1,595