2016-07-17 8 views
1

私はMobXストアを持っていて、ネイティブクラスの設定と動作には反応しますが、意図したとおりのものではありません。私はこのようなUserPreferencesStoreで観察可能なユーザー設定のリストを持っている:MobX - 観察可能な値を変更するために観測可能なパラメータをアクションに渡しますか?

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

と:反応ネイティブクラスで

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

を、私はこのようなTouchableHighlightのたonPressに基づいて上記の観測を更新したいですここでは動作しない観測を更新するonPressPreferenceアクションが...ある

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

preferenceNameパラメータはアラートに示されているように完全に渡されますが、ここに「追加」されたときには動作していないように見えますUserPreferencesStore.userPreferences.preferenceName渡された優先観察可能ストア値を更新します。

しかし、私が3つのアクションを作成し、それぞれのプリファレンスに1つずつトリガーしてonPressをトリガーすると、それは機能し、オブザーバブルはストア内の値を正しく更新しますが、渡されたパラメータを単一のアクションに使用することができます。

渡されたパラメータを単一のアクションで動作させて、それぞれの観測値の値を更新するにはどうすればよいですか?

+0

あなたの質問は実際にはMobXについてではありません – Alik

答えて

3

変数名のプロパティにアクセスするには、ブラケット表記を使用する必要があります。 UserPreferencesStore.userPreferences[preferenceName] = UserPreferencesStore.userPreferences[preferenceName] == 0 ? 1 : 0;

+0

ありがとう、私はそれを認識しませんでした。新しい何かを今日学んだ:) – Wonka

関連する問題