質問編集履歴
1
試したことの記述
title
CHANGED
File without changes
|
body
CHANGED
@@ -45,4 +45,75 @@
|
|
45
45
|
label: playing ? "Pause" : "Play"
|
46
46
|
}
|
47
47
|
}
|
48
|
-
```
|
48
|
+
```
|
49
|
+
|
50
|
+
###試したこと
|
51
|
+
|
52
|
+
```
|
53
|
+
const url = "http://www.ne.jp/asahi/music/myuu/wave/hana.mp3";
|
54
|
+
const useAudio = (url: string) => {
|
55
|
+
const [audio] = useState(new Audio(url));
|
56
|
+
const [playing, setPlaying] = useState(false);
|
57
|
+
const toggling = useCallback(
|
58
|
+
e => {
|
59
|
+
setPlaying(!playing);
|
60
|
+
console.log(playing);
|
61
|
+
},
|
62
|
+
[playing]
|
63
|
+
);
|
64
|
+
|
65
|
+
useEffect(() => {
|
66
|
+
playing ? audio.play() : audio.pause();
|
67
|
+
}, [playing]);
|
68
|
+
|
69
|
+
useEffect(() => {
|
70
|
+
audio.addEventListener("ended", () => setPlaying(false));
|
71
|
+
return () => {
|
72
|
+
audio.removeEventListener("ended", () => setPlaying(false));
|
73
|
+
};
|
74
|
+
}, []);
|
75
|
+
|
76
|
+
return [playing, toggling];
|
77
|
+
};
|
78
|
+
const [playing, toggling] = useAudio(url);
|
79
|
+
```
|
80
|
+
|
81
|
+
```
|
82
|
+
audioPlayerProps: {
|
83
|
+
buttonPlayProps: {
|
84
|
+
buttonType: 2,
|
85
|
+
onClickAction: () => toggling(),
|
86
|
+
label: playing ? "Pause" : "Play"
|
87
|
+
}
|
88
|
+
},
|
89
|
+
```
|
90
|
+
|
91
|
+
と変更
|
92
|
+
|
93
|
+
しかし
|
94
|
+
```
|
95
|
+
onClickAction: () => toggling(),
|
96
|
+
```
|
97
|
+
の```toggling()```の部分でエラー
|
98
|
+
|
99
|
+
|
100
|
+
```この式は呼び出し可能ではありません。
|
101
|
+
型 'boolean | ((e: any) => void)' のすべての構成要素が呼び出し可能なわけではありません。
|
102
|
+
型 'false' には呼び出しシグネチャがありません。
|
103
|
+
```
|
104
|
+
|
105
|
+
が出た
|
106
|
+
|
107
|
+
---
|
108
|
+
ここで、返り値として関数を返していないのが原因かと思い
|
109
|
+
```
|
110
|
+
return [playing, toggling];
|
111
|
+
```
|
112
|
+
を
|
113
|
+
```
|
114
|
+
return [playing, toggling()];
|
115
|
+
```
|
116
|
+
|
117
|
+
と変更するが、```toggling()```に引数が一つ必要だとエラーがでたので
|
118
|
+
|
119
|
+
```useCallback```の```e```を削除してみて実行したことろ、描画の際に```playing```の値が``true``と`false`を繰り返してエラーになってしまうようになった。
|