Search code examples
reactjstypeerrorspeech-to-text

default is not a function React Type error


Hi guys i want to make speech to text in React component. But when i run it I get this error: react_speech_recognition__WEBPACK_IMPORTED_MODULE_1___default(...) is not a function Can someone show me what to do?

import React, { Component } from 'react'
import SpeechRecognition from 'react-speech-recognition'

class Mic extends Component {
  render() {
    const { transcript, resetTranscript, browserSupportsSpeechRecognition } = this.props

    if (!browserSupportsSpeechRecognition) {
      return null
    }
    
    return (
      <div>
        <button onClick={SpeechRecognition.startListening}>Start</button>
        <button onClick={SpeechRecognition.stopListening}>Stop</button>
        <button onClick={resetTranscript}>Reset</button>
        <p>{transcript}</p>
      </div>
    )
  }
}

export default SpeechRecognition(Mic)

In app.js i run it like this (if this is necessary):

import React from 'react';
import logo from './logo.svg';
import './App.css';
import Container from './components/container/Container';
import Database from './components/database/Database';
import Mic from './components/mic/Mic';
import Test from './components/test/Test';

function App() {
  return (
    <Mic/>
    //<Test/>
  );
}

export default App;


Solution

  • It is because of this line SpeechRecognition(Mic) . The Error states that the default export from your module is not a function which means that SpeechRecognition is not a function so you cannot call it .

    change your code as

    import React from 'react'
    import SpeechRecognition, { useSpeechRecognition } from 'react-speech-recognition'
    
    const Mic = () => {
      const { transcript, resetTranscript } = useSpeechRecognition()
    
      if (!SpeechRecognition.browserSupportsSpeechRecognition()) {
        return null
      }
    
      return (
        <div>
          <button onClick={SpeechRecognition.startListening}>Start</button>
          <button onClick={SpeechRecognition.stopListening}>Stop</button>
          <button onClick={resetTranscript}>Reset</button>
          <p>{transcript}</p>
        </div>
      )
    }
    export default Mic 
    

    Looks like you have installed the latest version, but trying to use it in old way.

    Please take a look at this Migration Guide