回答編集履歴

3

提案を追加しました

2023/06/16 01:37

投稿

tkc310
tkc310

スコア28

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

微調整

2023/06/14 04:17

投稿

tkc310
tkc310

スコア28

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のみで監視・参照を行う方法を追加

2023/06/14 04:16

投稿

tkc310
tkc310

スコア28

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
+