为什么Mobx声称我试图改变一个可观察的值?

为什么Mobx声称我试图改变一个可观察的值?,mobx,Mobx,每次尝试访问mobx类实例的计算值时,我都会得到 [MobX] Since strict-mode is enabled, changing (observed) observable values without using an action is not allowed. Tried to modify: VoiceSettings@3.voices 我创建了这样一个类: import{action,computed,makeObservable,observable}来自“mobx”

每次尝试访问mobx类实例的计算值时,我都会得到

[MobX] Since strict-mode is enabled, changing (observed) observable values without using an action is not allowed. Tried to modify: VoiceSettings@3.voices
我创建了这样一个类:

import{action,computed,makeObservable,observable}来自“mobx”
导出默认类语音设置{
@可观察语言:语言='en';
@可观察说话人:声音;
@可观察到的声音:声音[]=[];
构造函数(){
使可观察(这);
这个.getAvailableVoices();
}
异步getAvailableVoices(){
this.voices=wait Speech.getAvailableVoicesAsync();
把这个声音还给我;
}
@计算
获取扬声器():字符串[]{
把这个还给我
.filter(voice=>voice.language.startsWith(this.language))
.map(voice=>voice.name)
}
@行动
设置语言(语言:语言){
这种语言=语言;
}
}
export const voiceSettings=新的voiceSettings();
这似乎只有在我调用
语音设置.扬声器时才会发生

更新
我的错误。被错误消息触发。我正在调用方法
语音。getAvailableVoices()

如何创建异步操作是很重要的。一种方法是使用
runInAction

async getAvailableVoices(){
const voices=wait Speech.getAvailableVoicesAsync();
运行不活动(()=>{
这个。声音=声音;
});
把这个声音还给我;
}

speakers
只有一个
getter
,所以它是只读的。可以理解@connexo,但我肯定可以在一个只准备好的变量上执行
voiceSettings.speakers.map()
,对吗?