首页 > 解决方案 > 将 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)return{ lang: 'ja-JP' }和其余属性。

这是 webkitspeechrecognition api 的问题吗?有没有办法让它工作?

标签: reactjswebkitspeechrecognition

解决方案


对象扩展运算符 ( ) 返回键值对...的可枚举属性。Object但并非所有从Object原型继承的类型都具有可枚举的属性,看起来本机SpeechRecognition类型就是其中之一——没有可迭代的键,只有不可枚举的属性。(所以,...(new SpeechRecognition)甚至没有抛出错误;它尽职地返回了recognition.

我认为您将需要创建一个new SpeechRecognition具有所需的实例recognition.lang = 'ja-JP',然后再创建一个实例setState。我知道,没有任何传播或方法可以从旧实例.assign()创建新实例。SpeechRecognition我可以看到这如何造成SpeechRecognition浏览器正在分配内存的多个实例的情况;您可能需要发挥创意,并且完成delete对旧SpeechRecognition实例的引用setState,以便垃圾收集可以完成其工作并只留下一个实例。


推荐阅读