1

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

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

在 react native 类中,我想基于 onPress 更新上述 observables,TouchableHighlight如下所示:

<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更新不起作用的可观察对象的操作...

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

正如警报所显示的那样,参数被完美地传递了,但是当“附加”这里以更新传递的首选项可观察存储值preferenceName时,它似乎不起作用。UserPreferencesStore.userPreferences.preferenceName

但是,如果我创建 3 个操作,每个首选项一个,并在 onPress 上触发它们,那么它会起作用,并且可观察对象会正确更新商店中的值,但是重复了很多代码,我真的很想让它使用传递给单个动作的参数。

知道如何让传递的参数与单个操作一起更新相应的 observable 的值吗?

4

1 回答 1

3

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

于 2016-07-17T16:53:58.607 回答