Vue.js 3.0 Tutorial

Vue.js 3.0 Component Advanced

Vue.js 3.0 Transitions & Animations

Vue.js 3.0 Reusable & Combinable

Vue.js 3.0 Advanced

Vue.js 3.0 Tools

Vue.js 3.0 Scale

Vue.js 3.0 Accessibility

Vue.js 3.0 Migrating from Vue2

Vue.js 3.0 Contribute Documentation

Vue.js 3.0 API References

Vue.js 3.0 Style Guide

Vue 3.0 Data Property and Methods

In Vue 3.0, the way to define component's data properties and methods has been slightly changed if you're using the Composition API, compared to the traditional Options API that was commonly used in Vue 2. However, both ways are still valid in Vue 3. Let's look at examples for both.

1. Options API (Vue 2 Style)

This is the traditional way of handling data properties and methods in Vue, and it still works in Vue 3.

Here's a simple Vue component:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="reverseMessage">Reverse Message</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  methods: {
    reverseMessage() {
      this.message = this.message.split('').reverse().join('');
    }
  }
}
</script>

In the above code:

  • The data function returns an object that contains all the data properties for the component. These properties are reactive, meaning that Vue will automatically update the DOM when these properties change.
  • The methods object contains all the methods for the component. These can be called from within the component (for example, as a result of a user action).

2. Composition API (Vue 3 Style)

In Vue 3, the Composition API was introduced, which provides a more flexible way to compose component logic.

Here's how you could rewrite the previous component using the Composition API:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="reverseMessage">Reverse Message</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const message = ref('Hello Vue!');

    function reverseMessage() {
      message.value = message.value.split('').reverse().join('');
    }

    return {
      message,
      reverseMessage,
    };
  }
}
</script>

In the above code:

  • The setup function is a new component option provided by the Composition API. It serves as the entry point for using the Composition API inside components.
  • Instead of defining a data function, we define a ref for each piece of reactive data.
  • Instead of defining methods inside a methods object, we just define them as regular JavaScript functions inside setup.

The setup function should return an object that exposes the properties and methods you want to use in your template. In this case, we're exposing the message ref and the reverseMessage function.

Whether to use the Options API or the Composition API is a matter of personal preference, the size and complexity of your project, and your team's familiarity with Vue. Both are powerful and flexible ways to build components in Vue 3.

  1. Vue 3.0 Reactive Data in Components:

    • Utilize reactive data properties in Vue 3.0 components.
    <!-- ReactiveDataComponent.vue -->
    <template>
      <div>
        <p>{{ message }}</p>
      </div>
    </template>
    
    <script>
    import { ref } from 'vue';
    
    export default {
      setup() {
        const message = ref('Hello, Reactive Data!');
    
        return {
          message,
        };
      },
    };
    </script>
    
  2. Vue 3.0 Methods in Components:

    • Define methods to perform actions in Vue 3.0 components.
    <!-- MethodsComponent.vue -->
    <template>
      <div>
        <button @click="sayHello">Say Hello</button>
      </div>
    </template>
    
    <script>
    export default {
      methods: {
        sayHello() {
          alert('Hello, Methods!');
        },
      },
    };
    </script>
    
  3. Vue 3.0 Data Binding Examples:

    • Illustrate examples of data binding in Vue 3.0.
    <!-- DataBindingExamples.vue -->
    <template>
      <div>
        <p>{{ message }}</p>
        <input v-model="inputValue" />
        <p>Input Value: {{ inputValue }}</p>
      </div>
    </template>
    
    <script>
    import { ref } from 'vue';
    
    export default {
      setup() {
        const message = ref('Data Binding Examples');
        const inputValue = ref('');
    
        return {
          message,
          inputValue,
        };
      },
    };
    </script>
    
  4. Vue 3.0 Data Property Reactivity:

    • Observe the reactivity of data properties in Vue 3.0.
    <!-- DataReactivity.vue -->
    <template>
      <div>
        <p>{{ message }}</p>
        <button @click="updateMessage">Update Message</button>
      </div>
    </template>
    
    <script>
    import { ref } from 'vue';
    
    export default {
      setup() {
        const message = ref('Reactivity Example');
    
        function updateMessage() {
          message.value = 'Updated Message!';
        }
    
        return {
          message,
          updateMessage,
        };
      },
    };
    </script>
    
  5. Vue 3.0 Methods vs Computed Properties:

    • Differentiate between methods and computed properties in Vue 3.0.
    <!-- MethodsVsComputed.vue -->
    <template>
      <div>
        <p>{{ getComputedMessage }}</p>
        <button @click="updateMessage">Update Message</button>
      </div>
    </template>
    
    <script>
    import { ref, computed } from 'vue';
    
    export default {
      setup() {
        const message = ref('Methods vs Computed');
        
        const getComputedMessage = computed(() => {
          return `Computed: ${message.value}`;
        });
    
        function updateMessage() {
          message.value = 'Updated Message!';
        }
    
        return {
          getComputedMessage,
          updateMessage,
        };
      },
    };
    </script>
    
  6. Vue 3.0 Accessing Data in Templates:

    • Access data properties in Vue 3.0 templates.
    <!-- AccessDataInTemplate.vue -->
    <template>
      <div>
        <p>{{ message }}</p>
        <button @click="updateMessage">Update Message</button>
      </div>
    </template>
    
    <script>
    import { ref } from 'vue';
    
    export default {
      setup() {
        const message = ref('Accessing Data in Templates');
    
        function updateMessage() {
          message.value = 'Updated Message!';
        }
    
        return {
          message,
          updateMessage,
        };
      },
    };
    </script>
    
  7. Vue 3.0 Lifecycle Hooks and Data:

    • Observe the interaction between lifecycle hooks and data in Vue 3.0.
    <!-- LifecycleHooksData.vue -->
    <template>
      <div>
        <p>{{ message }}</p>
      </div>
    </template>
    
    <script>
    import { ref, onMounted } from 'vue';
    
    export default {
      setup() {
        const message = ref('Lifecycle Hooks and Data');
    
        onMounted(() => {
          console.log('Component mounted');
        });
    
        return {
          message,
        };
      },
    };
    </script>