①hogeは変更監視の値として利用して、表示などに参照する値にはfugaを利用する方法
watch関数、第2引数のコールバックをasyncにして await doSomething
にするのはいかがでしょうか?
https://ja.vuejs.org/guide/essentials/watchers.html#basic-example
ts
1<script setup>
2 const hoge = ref<number>(1);
3 const fuga = hoge; // ref<number>(1);でも問題ない
4 const doSomething = async () => { await piyo(); };
5
6 watch(hoge, async (new, old) => {
7 await doSomething();
8 fuga.value = new;
9 });
10</script>
11
12<template>
13 <p>
14 <input v-model="hoge" />
15 </p>
16 <p>{{ fuga }}</p>
17</template>
②hogeを変更監視・参照する値として利用する方法
hogeのみで監視・参照を行う必要があれば doSomething
の処理結果に応じて、watch関数内で hoge.value
の値を入れ直す方法はいかがでしょうか?
(これは循環参照が起こるかも?)
ts
1<script setup>
2 const hoge = ref<number>(1);
3 const doSomething = async () => {
4 const result = await piyo();
5 return result;
6 };
7
8 watch(hoge, async (new, old) => {
9 const condition = await doSomething();
10 switch(condition) {
11 case 'success':
12 hoge.value = new;
13 break;
14 case 'fail':
15 hoge.value = old;
16 break;
17 case 'x':
18 ...
19 }
20 });
21</script>
22
23<template>
24 <p>
25 <input v-model="hoge" />
26 </p>
27</template>
追加の提案
hogeを変更するイベントが発行される要素の参照とイベントハンドラーを分ける方法
js
1<script setup>
2import { ref } from "vue";
3
4const hoge = ref(1);
5
6const doSomthing = () => {
7 console.log("doSomthing", hoge.value);
8
9 return Promise.resolve("success");
10};
11
12const handleChange = async (event) => {
13 const result = await doSomthing();
14
15 if (result) {
16 hoge.value = event.target.value;
17 }
18
19 console.log("handleChange", event.target.value);
20};
21</script>
22
23<template>
24 <p>
25 <input :value="hoge" @input="handleChange" />
26 </p>
27</template>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/06/15 23:29
2023/06/16 01:34 編集
2023/06/16 01:57