Nuxt3パブリックベータ版時点の情報となります。
useFetch()で2回目以降のapiがスルーされる問題
useFetch()
を使用して「server/api」以下にリクエストしている場合。
問題のコード(Vueファイル/setup内/カートに入れるボタンメソッド)
await useFetch(
'/api/shopify/add-line-items',
{ method: 'POST', body }
)
.then(({ data: cart }) => {
console.log('Added item!!')
shopifyStore.updateCart(cart.value)
emit('addedToCart')
})
2回目以降のクリックアクションでapiリクエストがスルーされる事象が発生しました。
1回目のカートに入れるボタンは正常に動きます。
が、2回目のクリック時はapiリクエストが無視され、いきなりthen()
に処理が移っています。
await useFetch(
'/api/shopify/add-line-items',
{ method: 'POST', body }
)
.then(({ data: cart }) => {
// 2回目以降のクリックはここに処理が移る
console.log('Added item!!')
shopifyStore.updateCart(cart.value)
emit('addedToCart')
})
キャッシュが原因。useAsyncData()を使おう
上記の問題はuseFetch()
が内部で行っているキャッシュが原因で、2回目以降の処理をスルーします。
キャッシュを無効にするオプションはuseAsyncData()
にしか用意されていません。
そこで、useAsyncData()
のキャッシュ無効オプションを付与してuseFetch()
を書き換えます。
解決したコード(最初のコードと同じapiリクエスト)
await useAsyncData('add-line-items', () =>
$fetch(
'/api/shopify/add-line-items',
{ method: 'POST', body }
),
{
initialCache: false
}
)
.then(({ data: cart }) => {
console.log('Added item!!')
shopifyStore.updateCart(cart.value)
emit('addedToCart')
})
-
initialCache
...false
に設定すると、最初のフェッチでペイロードキャッシュをスキップする。(デフォルトはtrue
)
ちなみに、
useAsyncData('key', $fetch('リクエストURL'))
と
useFetch('リクエストURL')
は、同じことを行っています。
ただ、オプションの違いがあるので必要に応じて書き換えましょう。
解決したgif
2回目以降のクリックも、ボタンが無効になりapi処理が正しく行われています。
← Prev
Next →
あなたの力になれること
私自身が独学でプログラミングを勉強してきたので、一人で学び続ける苦しみは痛いほど分かります。そこで、当時の私がこんなのあったら良いのにな、と思っていたサービスを立ち上げました。周りに質問できる人がいない、答えの調べ方が分からない、ここを聞きたいだけなのにスクールは高額すぎる。そんな方に向けた単発・短期間メンターサービスを行っています。
独学プログラマのサービス
Nuxt3の投稿
1
Nuxt3 Betaをブラウザに立ち上げる【Nuxt3 × VSCodeセットアップ】
2
Nuxt3のsetup内ではthisの代わりにuseNuxtApp()を使用する
3
Nuxt3でレイアウトファイルを使用するには<NuxtLayout>を使う
4
Nuxt3で動的ルーティングを生成するには[id].vueを作成する
5
Nuxt3のmiddlewareの登録と呼び出し&Beta版のバグとその回避策
6
Nuxt3betaのServerMiddlewareで特定ルートのみ発火させる方法は動かない
7
importする自作プラグインはserver/apiには置けない
8
Nuxt3でinjectみたいに自作クラスを登録するにはprovideを使う
9
Nuxt3のuseFetch()で2回目以降のapiがスルーされる問題
1
Nuxt3を使ってShopifyの商品一覧を取得しよう
2
Nuxt3をNetlifyCLIとnetlify.tomlを使ってNetlifyにデプロイしよう
3
Nuxt3のserver/apiとuseFetchを使用してShopifyへサーバーAPIリクエストを実装
4
Nuxt3でShopifyのCheckoutIDが付与されたURLにリダレクト処理を行う
5
【Nuxt3×Shopify】Piniaを導入した商品取得のベストプラクティス