回答編集履歴
3
提案を追加しました
test
CHANGED
@@ -58,3 +58,38 @@
|
|
58
58
|
</template>
|
59
59
|
```
|
60
60
|
|
61
|
+
|
62
|
+
**追加の提案**
|
63
|
+
|
64
|
+
hogeを変更するイベントが発行される要素の参照とイベントハンドラーを分ける方法
|
65
|
+
|
66
|
+
```js
|
67
|
+
<script setup>
|
68
|
+
import { ref } from "vue";
|
69
|
+
|
70
|
+
const hoge = ref(1);
|
71
|
+
|
72
|
+
const doSomthing = () => {
|
73
|
+
console.log("doSomthing", hoge.value);
|
74
|
+
|
75
|
+
return Promise.resolve("success");
|
76
|
+
};
|
77
|
+
|
78
|
+
const handleChange = async (event) => {
|
79
|
+
const result = await doSomthing();
|
80
|
+
|
81
|
+
if (result) {
|
82
|
+
hoge.value = event.target.value;
|
83
|
+
}
|
84
|
+
|
85
|
+
console.log("handleChange", event.target.value);
|
86
|
+
};
|
87
|
+
</script>
|
88
|
+
|
89
|
+
<template>
|
90
|
+
<p>
|
91
|
+
<input :value="hoge" @input="handleChange" />
|
92
|
+
</p>
|
93
|
+
</template>
|
94
|
+
```
|
95
|
+
|
2
微調整
test
CHANGED
@@ -26,6 +26,7 @@
|
|
26
26
|
**②hogeを変更監視・参照する値として利用する方法**
|
27
27
|
|
28
28
|
hogeのみで監視・参照を行う必要があれば `doSomething` の処理結果に応じて、watch関数内で `hoge.value` の値を入れ直す方法はいかがでしょうか?
|
29
|
+
(これは循環参照が起こるかも?)
|
29
30
|
|
30
31
|
```ts
|
31
32
|
<script setup>
|
1
hogeのみで監視・参照を行う方法を追加
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
**hogeは変更監視の値として利用して、表示などに参照する値にはfugaを利用する方法**
|
1
|
+
**①hogeは変更監視の値として利用して、表示などに参照する値にはfugaを利用する方法**
|
2
2
|
|
3
3
|
watch関数、第2引数のコールバックをasyncにして `await doSomething` にするのはいかがでしょうか?
|
4
4
|
https://ja.vuejs.org/guide/essentials/watchers.html#basic-example
|
@@ -23,3 +23,37 @@
|
|
23
23
|
</template>
|
24
24
|
```
|
25
25
|
|
26
|
+
**②hogeを変更監視・参照する値として利用する方法**
|
27
|
+
|
28
|
+
hogeのみで監視・参照を行う必要があれば `doSomething` の処理結果に応じて、watch関数内で `hoge.value` の値を入れ直す方法はいかがでしょうか?
|
29
|
+
|
30
|
+
```ts
|
31
|
+
<script setup>
|
32
|
+
const hoge = ref<number>(1);
|
33
|
+
const doSomething = async () => {
|
34
|
+
const result = await piyo();
|
35
|
+
return result;
|
36
|
+
};
|
37
|
+
|
38
|
+
watch(hoge, async (new, old) => {
|
39
|
+
const condition = await doSomething();
|
40
|
+
switch(condition) {
|
41
|
+
case 'success':
|
42
|
+
hoge.value = new;
|
43
|
+
break;
|
44
|
+
case 'fail':
|
45
|
+
hoge.value = old;
|
46
|
+
break;
|
47
|
+
case 'x':
|
48
|
+
...
|
49
|
+
}
|
50
|
+
});
|
51
|
+
</script>
|
52
|
+
|
53
|
+
<template>
|
54
|
+
<p>
|
55
|
+
<input v-model="hoge" />
|
56
|
+
</p>
|
57
|
+
</template>
|
58
|
+
```
|
59
|
+
|