質問編集履歴

1

試したことの記述

2020/06/29 02:49

投稿

ryota-code
ryota-code

スコア0

test CHANGED
File without changes
test CHANGED
@@ -93,3 +93,145 @@
93
93
  }
94
94
 
95
95
  ```
96
+
97
+
98
+
99
+ ###試したこと
100
+
101
+
102
+
103
+ ```
104
+
105
+ const url = "http://www.ne.jp/asahi/music/myuu/wave/hana.mp3";
106
+
107
+ const useAudio = (url: string) => {
108
+
109
+ const [audio] = useState(new Audio(url));
110
+
111
+ const [playing, setPlaying] = useState(false);
112
+
113
+ const toggling = useCallback(
114
+
115
+ e => {
116
+
117
+ setPlaying(!playing);
118
+
119
+ console.log(playing);
120
+
121
+ },
122
+
123
+ [playing]
124
+
125
+ );
126
+
127
+
128
+
129
+ useEffect(() => {
130
+
131
+ playing ? audio.play() : audio.pause();
132
+
133
+ }, [playing]);
134
+
135
+
136
+
137
+ useEffect(() => {
138
+
139
+ audio.addEventListener("ended", () => setPlaying(false));
140
+
141
+ return () => {
142
+
143
+ audio.removeEventListener("ended", () => setPlaying(false));
144
+
145
+ };
146
+
147
+ }, []);
148
+
149
+
150
+
151
+ return [playing, toggling];
152
+
153
+ };
154
+
155
+ const [playing, toggling] = useAudio(url);
156
+
157
+ ```
158
+
159
+
160
+
161
+ ```
162
+
163
+ audioPlayerProps: {
164
+
165
+ buttonPlayProps: {
166
+
167
+ buttonType: 2,
168
+
169
+ onClickAction: () => toggling(),
170
+
171
+ label: playing ? "Pause" : "Play"
172
+
173
+ }
174
+
175
+ },
176
+
177
+ ```
178
+
179
+
180
+
181
+ と変更
182
+
183
+
184
+
185
+ しかし
186
+
187
+ ```
188
+
189
+ onClickAction: () => toggling(),
190
+
191
+ ```
192
+
193
+ の```toggling()```の部分でエラー
194
+
195
+
196
+
197
+
198
+
199
+ ```この式は呼び出し可能ではありません。
200
+
201
+ 型 'boolean | ((e: any) => void)' のすべての構成要素が呼び出し可能なわけではありません。
202
+
203
+ 型 'false' には呼び出しシグネチャがありません。
204
+
205
+ ```
206
+
207
+
208
+
209
+ が出た
210
+
211
+
212
+
213
+ ---
214
+
215
+ ここで、返り値として関数を返していないのが原因かと思い
216
+
217
+ ```
218
+
219
+ return [playing, toggling];
220
+
221
+ ```
222
+
223
+
224
+
225
+ ```
226
+
227
+ return [playing, toggling()];
228
+
229
+ ```
230
+
231
+
232
+
233
+ と変更するが、```toggling()```に引数が一つ必要だとエラーがでたので
234
+
235
+
236
+
237
+ ```useCallback```の```e```を削除してみて実行したことろ、描画の際に```playing```の値が``true``と`false`を繰り返してエラーになってしまうようになった。