Search code examples
vue.jscomponents

How can i just have one Component instead of different components in the context of Vuejs


I am new to Vuejs, I am using 4 different components, where in every component i have called the API. Here 4 different components are all same except their contents.

Now, i want to make my code effective, so i want to have a single component, the reason why i created different components is my another App.vue component has 4 different buttons, so whenever you click any of it, it will open the respective component.

But now i want to have only one component instead of four different components, and whenever the buttons in App.vue component is clicked it should open the exact content in single component(instead of 4 components).

Please do help me with this, by sharing your ideas and if any examples.


Solution

  • In this context, you can use props, which is a way of passing data to "child" components.

    https://v2.vuejs.org/v2/guide/components-props.html

    Example

    App.vue

    <template>
      <div id="app">
        <SingleComponent :button="button" />
      </div>
    </template>
    
    <script>
    import SingleComponent from "@/components/SingleComponent.vue";
    // @/ means src/
    
    export default {
      name: "App",
      components: {
        SingleComponent,
      },
      data: () => ({
        button: 2,
      }),
    };
    </script>
    

    SingleComponent.vue

    <template>
      <div>
        <button v-if="button === 0">...</button>
        <button v-else-if="button === 1">...</button>
        <button v-else-if="button === 2">...</button>
        <button v-else-if="button === 3">...</button>
      </div>
    </template>
    
    <script>
    export default {
      name: "SingleComponent",
      props: {
        button: {
          type: Number,
          required: true,
        },
      },
    };
    </script>
    

    You should also take a look at slots, it is very important in Vue.js and that could also solve your problem.

    https://v2.vuejs.org/v2/guide/components-slots.html