Vue.js の button component を axios リクエスト中のみ disabled にする方法についての質問です

単純に button を リクエスト中に disabled にするだけであれば

<template>
  <div>
    <button @click="handleClick" :disabled="disabled">
      更新
    </button>
  </div>
</template>

<script>
  export default {
    data() {
      return()  {
        {
          disabled: false 
        }
      }
    },
    methods: {
      handleClick() {
        this.$data.disabled = true
        requestApi() // リクエストメソッド (@return Promise)
          .then(_ => this.$data.disabled = false)
      }
    }
  }
</script>

でよいと思うのですが, アプリケーション中にいくつも同じような button を置くので vue component 化しようとしました.

<template>
  <button @click="handleClick" :disabled="disabled">
    <slot></slot>
  </button>
</template>

<script>
  export default {
    data() {
      return() {
        disabled: false
      }
    },
    methods: {
      handleClick() {
        this.$data.disabled = true
        this.$emit("click") // リクエストが終わったことを受け取るすべがわからない
      }
    }
  }

</script>

// --- 


<template>
  <div>
    <request-button @click="requestApi">
      更新
    </request-button>
  </div>
</template>

<script>
  import RequestButton from './RequestButton' 
  export default {
    components: { RequestButton }
  }
</script>

上記のような実装を想定したのですが, 親コンポーネントが実行したリクエストを子コンポーネントが受け取る方法がわからない状態です.

親コンポーネントに disabled 判定の data を用意して 子コンポーネントに渡しても, disabled の切り替えは 親コンポーネントで行わなければならず, コンポーネント切り出しする意味が薄れるように思います.

良い解決案をご提示いただければ幸いです.