@@ -35,6 +35,7 @@ export function useSpeechRecognition({
3535 const [ interimTranscript , setInterimTranscript ] = useState ( "" ) ;
3636 const [ isFinal , setIsFinal ] = useState ( false ) ;
3737 const [ isListening , setIsListening ] = useState ( false ) ;
38+ const [ isSupported , setIsSupported ] = useState ( false ) ;
3839 const [ error , setError ] = useState < SpeechRecognitionErrorEvent | null > ( null ) ;
3940
4041 const recognitionRef = useRef < SpeechRecognition | null > ( null ) ;
@@ -47,6 +48,10 @@ export function useSpeechRecognition({
4748 return window . SpeechRecognition || window . webkitSpeechRecognition ;
4849 } , [ ] ) ;
4950
51+ useEffect ( ( ) => {
52+ setIsSupported ( ! ! SpeechRecognition ) ;
53+ } , [ SpeechRecognition ] ) ;
54+
5055 useEffect ( ( ) => {
5156 if ( ! SpeechRecognition ) return ;
5257
@@ -110,14 +115,14 @@ export function useSpeechRecognition({
110115 } , [ SpeechRecognition , continuous , lang , timeout ] ) ;
111116
112117 useEffect ( ( ) => {
113- if ( ! SpeechRecognition ) return ;
118+ if ( ! isSupported ) return ;
114119 if ( onUpdate ) onUpdate ( { transcript, interimTranscript, isFinal } ) ;
115- } , [ onUpdate , transcript , interimTranscript , isFinal , SpeechRecognition ] ) ;
120+ } , [ onUpdate , transcript , interimTranscript , isFinal , isSupported ] ) ;
116121
117122 useEffect ( ( ) => {
118- if ( ! SpeechRecognition ) return ;
123+ if ( ! isSupported ) return ;
119124 if ( onError ) onError ( { error } ) ;
120- } , [ onError , error , SpeechRecognition ] ) ;
125+ } , [ onError , error , isSupported ] ) ;
121126
122127 const start = useCallback ( ( ) => {
123128 if ( ! recognitionRef . current ) return ;
@@ -134,7 +139,7 @@ export function useSpeechRecognition({
134139 interimTranscript,
135140 isListening,
136141 isFinal,
137- isSupported : ! ! SpeechRecognition ,
142+ isSupported,
138143 start,
139144 stop,
140145 error,
0 commit comments