![](/img/trans.png)
[英]MobX: how to change an observable value in response to another value's change?
[英]MobX - Pass parameter to action as observable to change observable value?
我有一個MobX商店,並且反應本機類設置和工作,但不是預期的。 我在UserPreferencesStore
有一個可觀察的用戶首選項列表,如下所示:
class UserPreferencesStore {
@observable userPreferences = {
receive_upvotes_mail: 0,
receive_answers_mail: 0,
receive_comments_mail: 1
}
}
在本機類中,我想基於onPress的TouchableHighlight
更新上面的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
參數會在警報顯示時完美地傳遞,但是當“附加”此處UserPreferencesStore.userPreferences.preferenceName
以更新傳遞的首選項可觀察商店值時,它似乎不起作用。
但是,如果我創建3個動作,每個首選項一個,並在onPress上觸發它們,那么它可以工作,並且observable在商店中正確地更新了值,但是重復了很多代碼,我真的想讓它與它一起工作傳遞給一個動作的參數。
知道如何讓傳遞的參數與單個動作一起使用以更新相應的observable的值嗎?
您需要使用括號表示法來訪問具有變量名稱的屬性。 UserPreferencesStore.userPreferences[preferenceName] = UserPreferencesStore.userPreferences[preferenceName] == 0 ? 1 : 0;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.