将webkitspeechRecognition设置为状态并更改语言

时间:2018-08-25 01:20:46

标签: reactjs webkitspeechrecognition

所以,我设置了

let recognition = new SpeechRecognition;
recognition.continuous = true;
recognition.interimResults = false;
recognition.lang = 'en-US';

this.setState({
    recognition
});

console.log(this.state.recognition)给了我语音识别对象。 因为我不应该使用this.state.recognition.lang = 'ja-JP'直接改变状态,所以我尝试创建一个新对象来将识别状态设置为:

let newObject = {...this.state.recognition, lang: 'ja-JP'}

但是,console.log(newObject)返回{ lang: 'ja-JP' },其余属性未克隆。

这是webkitspeechrecognition api的问题,是否有变通方法才能使其正常工作?

1 个答案:

答案 0 :(得分:0)

对象散布运算符(...)返回Object的可枚举属性作为键值对。但是,并非所有从Object原型继承的类型都具有可枚举的属性,并且看起来本机SpeechRecognition类型就是其中之一-没有可迭代的键,而只有不可枚举的属性。 (因此,...(new SpeechRecognition)甚至不会引发错误;它忠实地返回了recognition的零可枚举属性。这实际上不足为奇,因为有很多内置的Javascript对象类型没有可枚举的属性。)

我认为您将需要使用所需的new SpeechRecognition创建一个recognition.lang = 'ja-JP'实例,然后为此创建一个setState。据我所知,没有一种传播或.assign()方法可以从旧实例创建新的SpeechRecognition实例。我可以看到这如何造成浏览器向其分配内存的多个SpeechRecognition实例的情况。您可能需要发挥创造力,并在delete完成后SpeechRecognition对旧setState实例的引用,以便垃圾回收可以完成其工作,而只剩下一个实例。 / p>