Javascript MobX-将参数作为可观察值传递给动作,以更改可观察值?

Javascript MobX-将参数作为可观察值传递给动作,以更改可观察值?,javascript,mobx,Javascript,Mobx,我有一个MobX存储,一个react本机类设置和工作,但没有达到预期效果。我在UserPreferencesStore中有一个可观察到的用户偏好列表,如下所示: class UserPreferencesStore { @observable userPreferences = { receive_upvotes_mail: 0, receive_answers_mail: 0, receive_comments_mail: 1 }

我有一个MobX存储,一个react本机类设置和工作,但没有达到预期效果。我在
UserPreferencesStore
中有一个可观察到的用户偏好列表,如下所示:

class UserPreferencesStore {
    @observable userPreferences = {
        receive_upvotes_mail: 0,
        receive_answers_mail: 0,
        receive_comments_mail: 1
    }
}
<TouchableHighlight onPress={() => this.onPressPreference('receive_upvotes_mail')}>
    <Image source={require('images/Email.png')}
           style={UserPreferencesStore.userPreferences.receive_upvotes_mail == 1 && styles.active} />
</TouchableHighlight>

<TouchableHighlight onPress={() => this.onPressPreference('receive_answers_mail')}>
    <Image source={require('images/Email.png')}
           style={UserPreferencesStore.userPreferences.receive_answers_mail == 1 && styles.active} />
</TouchableHighlight>

<TouchableHighlight onPress={() => this.onPressPreference('receive_comments_mail')}>
    <Image source={require('images/Email.png')}
           style={UserPreferencesStore.userPreferences.receive_comments_mail == 1 && styles.active} />
</TouchableHighlight>
在react native类中,我想基于onPress of
TouchableHighlight
更新上述观察值,如下所示:

class UserPreferencesStore {
    @observable userPreferences = {
        receive_upvotes_mail: 0,
        receive_answers_mail: 0,
        receive_comments_mail: 1
    }
}
<TouchableHighlight onPress={() => this.onPressPreference('receive_upvotes_mail')}>
    <Image source={require('images/Email.png')}
           style={UserPreferencesStore.userPreferences.receive_upvotes_mail == 1 && styles.active} />
</TouchableHighlight>

<TouchableHighlight onPress={() => this.onPressPreference('receive_answers_mail')}>
    <Image source={require('images/Email.png')}
           style={UserPreferencesStore.userPreferences.receive_answers_mail == 1 && styles.active} />
</TouchableHighlight>

<TouchableHighlight onPress={() => this.onPressPreference('receive_comments_mail')}>
    <Image source={require('images/Email.png')}
           style={UserPreferencesStore.userPreferences.receive_comments_mail == 1 && styles.active} />
</TouchableHighlight>
正如警报显示的那样,
preferenceName
参数可以完美地传递,但是当在此处“追加”UserPreferencesStore.userPreferences.preferenceName以更新传递的首选项可观察存储值时,它似乎不起作用

但是,如果我创建了3个动作,每个首选项一个,并在按下时触发它们,那么它就可以工作,并且可观察的对象会正确地更新存储中的值,但是重复了很多代码,我真的想让它使用传递给单个动作的参数


您知道如何让传递的参数与单个操作一起工作以更新相应的可观察值吗?

您需要使用括号表示法来访问具有变量名的属性。
UserPreferencesStore.userPreferences[preferenceName]=UserPreferencesStore.userPreferences[preferenceName]=0?1 : 0;

你的问题是关于ECMAScript的,事实上,不是关于MobX谢谢你,我没有意识到这一点。今天学到了新东西:)