MobX - 将参数传递给action作为observable以更改可观察值?

时间:2016-07-17 15:27:05

标签: javascript mobx

我有一个MobX商店,反应本机类设置和工作,但不是预期的。我在UserPreferencesStore中有一个可观察的用户偏好列表,如下所示:

class UserPreferencesStore {
    @observable userPreferences = {
        receive_upvotes_mail: 0,
        receive_answers_mail: 0,
        receive_comments_mail: 1
    }
}

在本机类中,我想基于TouchableHighlight的onPress更新上面的observable,如下所示:

<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>

以下是onPressPreference更新不起作用的observable的操作......

@action onPressPreference = (preferenceName) => {
    // alert(preferenceName);
    UserPreferencesStore.userPreferences.preferenceName = UserPreferencesStore.userPreferences.preferenceName == 0 ? 1 : 0;
}

preferenceName参数会在警报显示时完美传递,但是当&#34;追加&#34;时,它似乎不起作用。这里UserPreferencesStore.userPreferences.preferenceName更新传递的首选项可观察商店值。

但是,如果我创建3个动作,每个首选项一个,并在onPress上触发它们,那么它可以正常工作,并且observable在商店中正确更新了值,但是重复了很多代码,我真的想要让它使用传递的参数来处理单个动作。

知道如何让传递的参数与单个动作一起使用以更新相应的可观察值?

1 个答案:

答案 0 :(得分:3)

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