我有一个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在商店中正确更新了值,但是重复了很多代码,我真的想要让它使用传递的参数来处理单个动作。
知道如何让传递的参数与单个动作一起使用以更新相应的可观察值?
答案 0 :(得分:3)
您需要使用括号表示法来访问具有变量名称的属性。
UserPreferencesStore.userPreferences[preferenceName] = UserPreferencesStore.userPreferences[preferenceName] == 0 ? 1 : 0;