Suspenseを自作する
始めに
Vue.jsも3系からSuspenseが実装されましたが、今一な点がいくつかありました。
- コンポーネントとして作らないといけない
- ページングなど、複数回ローディングすることはできなそう
参考
Vue.js 3.0 の新機能を試す。 〜 Suspense 編〜
そこで自分がやりたいことを満たすようなコンポーネントを自作してみたので、それの備忘録として記事に残します。
自作コンポーネント(SuspensePromise)の機能
Promiseを渡して状態を監視する
以下のようにPromiseをコンポーネントに渡し、状態に応じて表示内容を切り替えられるようにしています。promiseを渡すだけなので、新しくしたらまたローディングの表示ができるようになります。状態の切り替えの際にresolve, rejectで送ったデータも受け取って表示させることができます。
<template lang="pug">
div
SuspensePromise(
:promise="$data.promise"
:waitTime="100"
)
template(#pending)
p pending...
template(#resolved="{ data }")
p resolved, {{ data }}
template(#rejected="{ data }")
p rejected, {{ data }}
</template>
pending状態の表示待ち時間を指定できる
こういうローディング系で一番気にしているのが「一瞬ローディングが出てくる」ことです。resolveされるタイミングが早い場合はこういうローディングを出さずにしたいと思って調整しようと思うと、結構大変だと思います。
それをこのコンポーネントでは解消してくれて、waitTime
にpending状態を表示するまでの待ち時間を指定できます。この時間がくる前にresolveされれば、pendingを表示させずにすぐ結果を出すことができます。
終わりに
以上が自作した機能の紹介でした。詳細の実装はCodePenに書いていますので、興味がある方は是非みてください。
See the Pen Suspenseの自作(SuspensePromise) by wintyo (@wintyo) on CodePen.
Author And Source
この問題について(Suspenseを自作する), 我々は、より多くの情報をここで見つけました https://qiita.com/wintyo/items/c2f6b1962364ea5ddecb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .