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 State Management

State management in Vue 3.0 can be achieved using the Composition API, Vuex, or a combination of both. Vuex is the official state management library for Vue.js, which makes it easy to manage state that needs to be shared across multiple components.

In this tutorial, I will cover state management using both the Composition API and Vuex. Let's start with a basic example using the Composition API and then move on to Vuex.

  • State Management with the Composition API:

The Composition API is a set of additive, function-based APIs that allow flexible composition of component logic.

<template>
  <div>
    <button @click="increment">Increment</button>
    <p>Count: {{ count }}</p>
  </div>
</template>

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

export default {
  setup() {
    const count = ref(0);
    const increment = () => {
      count.value += 1;
    };

    return { count, increment };
  },
};
</script>

In the above code, we create a count reference (a reactive data source) and a method to increment the count. We then return both so they can be used in the template.

  • State Management with Vuex:

First, install Vuex by running the following command in your terminal:

npm install vuex@next --save

Now, let's create a simple Vuex store:

// src/store.js
import { createStore } from 'vuex';

export default createStore({
  state: {
    count: 0,
  },
  mutations: {
    increment(state) {
      state.count += 1;
    },
  },
});

The store has a state object that holds the count, and a mutation to increment the count.

Next, you will need to provide the store to your app:

// src/main.js
import { createApp } from 'vue';
import App from './App.vue';
import store from './store';

createApp(App).use(store).mount('#app');

Finally, you can access the store in your components:

<template>
  <div>
    <button @click="increment">Increment</button>
    <p>Count: {{ count }}</p>
  </div>
</template>

<script>
import { mapState, mapMutations } from 'vuex';

export default {
  computed: {
    ...mapState(['count']),
  },
  methods: {
    ...mapMutations(['increment']),
  },
};
</script>

In the above code, mapState and mapMutations are helper functions from Vuex that map store state and mutations to local computed properties and methods. When the button is clicked, the increment mutation is committed, which updates the state in the store.

This concludes a simple introduction to state management in Vue 3.0. The Composition API is great for managing state within individual components, while Vuex is perfect for managing global state that needs to be shared across multiple components.

  1. Vue 3.0 Reactive State Management:

    • Leverage Vue 3.0's reactivity system for managing state.
    <!-- ReactiveState.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('Hello, Vue 3.0!');
    
        function updateMessage() {
          message.value = 'Updated Message!';
        }
    
        return {
          message,
          updateMessage,
        };
      },
    };
    </script>
    
  2. Vue 3.0 Composition API for State Management:

    • Use the composition API to manage state.
    <!-- CompositionAPIState.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('Hello, Composition API!');
    
        function updateMessage() {
          message.value = 'Updated Message!';
        }
    
        return {
          message,
          updateMessage,
        };
      },
    };
    </script>
    
  3. Vue 3.0 Vuex Replacement for State Management:

    • Use the composition API and reactive data as an alternative to Vuex.
    <!-- VuexReplacement.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('Hello, Vuex Replacement!');
    
        function updateMessage() {
          message.value = 'Updated Message!';
        }
    
        return {
          message,
          updateMessage,
        };
      },
    };
    </script>
    
  4. Vue 3.0 Global State Management Options:

    • Explore global state management options in Vue 3.0.
    <!-- GlobalStateManagement.vue -->
    <template>
      <div>
        <p>{{ $store.state.message }}</p>
        <button @click="$store.commit('updateMessage')">Update Message</button>
      </div>
    </template>
    
    <script>
    import { useStore } from 'vuex';
    
    export default {
      setup() {
        const $store = useStore();
    
        return {
          $store,
        };
      },
    };
    </script>
    
  5. Vue 3.0 Reactive Data and State:

    • Understand how reactive data is used for state in Vue 3.0.
    <!-- ReactiveDataState.vue -->
    <template>
      <div>
        <p>{{ reactiveState.message }}</p>
        <button @click="updateMessage">Update Message</button>
      </div>
    </template>
    
    <script>
    import { reactive } from 'vue';
    
    export default {
      setup() {
        const reactiveState = reactive({
          message: 'Hello, Reactive Data!',
        });
    
        function updateMessage() {
          reactiveState.message = 'Updated Message!';
        }
    
        return {
          reactiveState,
          updateMessage,
        };
      },
    };
    </script>
    
  6. Vue 3.0 Composition API State Examples:

    • Explore different examples of state management using the composition API.
    <!-- CompositionAPIStateExamples.vue -->
    <template>
      <div>
        <p>{{ message }}</p>
        <button @click="updateMessage">Update Message</button>
      </div>
    </template>
    
    <script>
    import { ref, watchEffect } from 'vue';
    
    export default {
      setup() {
        const message = ref('Hello, Composition API State!');
    
        function updateMessage() {
          message.value = 'Updated Message!';
        }
    
        // Watch effect example
        watchEffect(() => {
          console.log('Message updated:', message.value);
        });
    
        return {
          message,
          updateMessage,
        };
      },
    };
    </script>
    
  7. Vue 3.0 Reactivity System Explained:

    • Understand the reactivity system in Vue 3.0.
    <!-- ReactivitySystem.vue -->
    <template>
      <div>
        <p>{{ message }}</p>
        <button @click="updateMessage">Update Message</button>
      </div>
    </template>
    
    <script>
    import { reactive } from 'vue';
    
    export default {
      setup() {
        const state = reactive({
          message: 'Hello, Reactivity System!',
        });
    
        function updateMessage() {
          state.message = 'Updated Message!';
        }
    
        return {
          message: state.message,
          updateMessage,
        };
      },
    };
    </script>
    
  8. Vue 3.0 Using Refs for State Management:

    • Utilize refs for state management in Vue 3.0.
    <!-- RefsStateManagement.vue -->
    <template>
      <div>
        <p>{{ message.value }}</p>
        <button @click="updateMessage">Update Message</button>
      </div>
    </template>
    
    <script>
    import { ref } from 'vue';
    
    export default {
      setup() {
        const message = ref('Hello, Refs State!');
    
        function updateMessage() {
          message.value = 'Updated Message!';
        }
    
        return {
          message,
          updateMessage,
        };
      },
    };
    </script>
    
  9. Vue 3.0 Reactive Programming with State:

    • Apply reactive programming concepts to manage state.
    <!-- ReactiveProgrammingState.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('Hello, Reactive Programming State!');
    
        function updateMessage() {
          message.value = 'Updated Message!';
        }
    
        return {
          message,
          updateMessage,
        };
      },
    };
    </script>