MobX - 将参数传递给可观察到的动作以更改可观察值?
MobX - Pass parameter to action as observable to change observable value?
我有一个 MobX 商店,一个 React Native class 设置和工作,但不是预期的那样。我在 UserPreferencesStore
中有一个可观察到的用户偏好列表,如下所示:
class UserPreferencesStore {
@observable userPreferences = {
receive_upvotes_mail: 0,
receive_answers_mail: 0,
receive_comments_mail: 1
}
}
在 react native class 中,我想像这样基于 TouchableHighlight
的 onPress 更新上面的 observables:
<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
参数完美传递,如警报所示,但当 "appended" 此处 UserPreferencesStore.userPreferences.preferenceName
更新传递的首选项可观察存储值时,它似乎不起作用。
但是,如果我创建 3 个操作,每个偏好一个,并在 onPress 上触发它们,那么它就可以工作,并且可观察对象会正确地更新商店中的值,但是重复了很多代码,我真的很想让它与传递的参数一起工作到一个动作。
知道如何让传递的参数与单个操作一起使用来更新相应的 observable 的值吗?
您需要使用括号表示法来访问带有变量名的属性。
UserPreferencesStore.userPreferences[preferenceName] = UserPreferencesStore.userPreferences[preferenceName] == 0 ? 1 : 0;
我有一个 MobX 商店,一个 React Native class 设置和工作,但不是预期的那样。我在 UserPreferencesStore
中有一个可观察到的用户偏好列表,如下所示:
class UserPreferencesStore {
@observable userPreferences = {
receive_upvotes_mail: 0,
receive_answers_mail: 0,
receive_comments_mail: 1
}
}
在 react native class 中,我想像这样基于 TouchableHighlight
的 onPress 更新上面的 observables:
<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
参数完美传递,如警报所示,但当 "appended" 此处 UserPreferencesStore.userPreferences.preferenceName
更新传递的首选项可观察存储值时,它似乎不起作用。
但是,如果我创建 3 个操作,每个偏好一个,并在 onPress 上触发它们,那么它就可以工作,并且可观察对象会正确地更新商店中的值,但是重复了很多代码,我真的很想让它与传递的参数一起工作到一个动作。
知道如何让传递的参数与单个操作一起使用来更新相应的 observable 的值吗?
您需要使用括号表示法来访问带有变量名的属性。
UserPreferencesStore.userPreferences[preferenceName] = UserPreferencesStore.userPreferences[preferenceName] == 0 ? 1 : 0;