vuejs লেবেলটি সহ পোস্টগুলি দেখানো হচ্ছে৷ সকল পোস্ট দেখান
vuejs লেবেলটি সহ পোস্টগুলি দেখানো হচ্ছে৷ সকল পোস্ট দেখান

Dynamic Component Rendering in Vue.js Based on User Selection

Dynamic Component Rendering in Vue.js Based on User Selection

This Vue.js code demonstrates how to dynamically load different components based on a selected category. Below is an explanation of the key parts of the code and why they are used:

<template>

  <div>

    <!-- Dropdown to select category -->

    <select v-model="selectedCategory">

      <option 

        v-for="category in categories" 

        :key="category" 

        :value="category">

        {{ category }}

      </option>

    </select>

    <!-- Dynamically load the component -->

    <component :is="currentComponent"></component>

  </div>

</template>


<script>

import Component1 from './Component1.vue';

import Component2 from './Component2.vue';

import Component3 from './Component3.vue';

export default {

  components: {

    Component1,

    Component2,

    Component3,

  },

  data() {

    return {

      selectedCategory: 'Category 1', // Default selected category

      categories: ['Category 1', 'Category 2', 'Category 3'], // List of categories

    };

  },

  computed: {

    // Dynamically return the component based on the selected category

    currentComponent() {

      const mapping = {

        'Category 1': 'component1',

        'Category 2': 'component2',

        'Category 3': 'component3',

      };

      return mapping[this.selectedCategory] || 'component1'; // Default to Component1

    },

  },

};

</script>

Template Explanation:

1. Dropdown to Select Category

<select v-model="selectedCategory">

  <option 

    v-for="category in categories" 

    :key="category" 

    :value="category">

    {{ category }}

  </option>

</select>

Purpose:

Provides a dropdown menu that allows the user to select a category.

The v-model="selectedCategory" binds the selected value to the selectedCategory data property.

Why v-for?:

Dynamically generates options from the categories array. Each option displays a category, and :value="category" ensures that the selected value is bound to the selectedCategory property.

2. Dynamic Component Loading

<component :is="currentComponent"></component>

Purpose:

Dynamically renders a Vue component based on the value of the currentComponent computed property.

The :is attribute specifies which component to display. It accepts a string representing the name of the component or a component object.

Script Explanation

1. Data Section

data() {

  return {

    selectedCategory: 'Category 1', // Default selected category

    categories: ['Category 1', 'Category 2', 'Category 3'], // List of categories

  };

},

selectedCategory:

Tracks the currently selected category. The default value is 'Category 1'.

This value changes when the user selects a different category from the dropdown.

categories:

Holds the list of available categories.

Used to generate the dropdown options dynamically.

2. Components Section

components: {

  Component1,

  Component2,

  Component3,

},

Purpose:

Registers the imported components (Component1, Component2, Component3) so they can be used in the template.

3. Computed Property

computed: {

  currentComponent() {

    const mapping = {

      'Category 1': 'component1',

      'Category 2': 'component2',

      'Category 3': 'component3',

    };

    return mapping[this.selectedCategory] || 'component1'; // Default to Component1

  },

},

Purpose:

Dynamically determines which component to load based on the selectedCategory value.

The mapping object maps category names to component names.

Why computed?:

computed properties are reactive and automatically update when selectedCategory changes.

It ensures that the correct component is dynamically loaded without requiring manual updates.

Why a mapping object?:

Provides a cleaner and more scalable way to associate categories with components.

Makes it easy to add or modify category-to-component mappings without complex if-else statements.

Fallback to 'component1':

Ensures a default component (Component1) is displayed if an invalid category is selected.

How It Works

Initial State:

selectedCategory is set to 'Category 1'.

currentComponent evaluates to 'component1', so Component1 is loaded by default.

User Interaction:

When the user selects a different category (e.g., 'Category 2'), selectedCategory is updated.

The currentComponent computed property automatically updates to 'component2', and Component2 is displayed.

Dynamic Behavior:

The component tag ensures that only the relevant component is rendered based on the current category.

Benefits of This Approach

Modularity:

The components are encapsulated and only loaded when needed.

Scalability:

Adding new categories and components is as simple as updating the categories array and the mapping object.

Efficiency:

computed properties are cached and recomputed only when their dependencies change.

Readability:

The code is clean, and the use of a mapping object eliminates the need for repetitive if-else statements.

Read More