2016-07-17 15 views
1

Ich habe einen MobX-Store, und eine native Klasse reagieren Setup und funktioniert, aber nicht wie vorgesehen. Ich habe eine Liste von beobachtbaren Benutzereinstellungen im UserPreferencesStore wie folgt aus:MobX - Parameter an Aktion übergeben, um den beobachtbaren Wert zu ändern?

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

Im reagieren nativen Klasse, ich will die oben Observablen auf onPress von TouchableHighlight wie diese Basis aktualisieren:

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

und hier ist die onPressPreference Aktion die Observablen zu aktualisieren, die nicht ...

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

diefunktioniertParameter wird perfekt übergeben, wie die Warnung es zeigt, aber es scheint nicht zu funktionieren, wenn "0" angehängt UserPreferencesStore.userPreferences.preferenceName, um den übergebenen Präferenz beobachtbaren Speicherwert zu aktualisieren.

Wenn ich jedoch 3 Aktionen, eine für jede Präferenz, und triggert sie onPress, dann funktioniert es und die Observable aktualisiert den Wert korrekt im Laden, aber es ist eine Menge Code wiederholt, und ich möchte wirklich bekommen Es funktioniert mit dem übergebenen Parameter zu einer einzigen Aktion.

Haben Sie eine Idee, wie Sie den übergebenen Parameter mit der einzelnen Aktion zur Aktualisierung des Werts der jeweiligen Observable verwenden können?

+0

Ihre Frage ist über ECMAScript, eigentlich nicht über MobX – Alik

Antwort

3

Sie müssen die Klammernotation verwenden, um auf eine Eigenschaft mit einem Variablennamen zuzugreifen.

+0

Danke, das habe ich nicht bemerkt. Habe heute etwas neues gelernt :) – Wonka