我有以下两个计算属性,第一个基于可观测的password
@observable password = '';
@computed
get passwordRules() {
return [
{isValid: !!((this.password.length >= 8) && (this.password.indexOf(' ') < 0 )), label: pageConstants.TIP_1},
{isValid: !!this.password.match('^(?=.*[A-Z])'), label: pageConstants.TIP_2},
{isValid: !!this.password.match('^(?=.*[a-z])'), label: pageConstants.TIP_3},
{isValid: !!this.password.match('^(?=.*[0-9])'), label: pageConstants.TIP_4},
{isValid: !!this.password.match('^(?=.*[-~!@#€=?_<>£"{}\[\\]\+\(\)\$%\^&\*])'), label: pageConstants.TIP_5}
];
}
@computed
get passwordIsValid() {
return !some(this.passwordRules, rule => !rule.isValid);
}每当passwordIsValid数组中的任何项发生更改时,我都希望passwordRules重新计算,但这种情况目前没有发生。
passwordIsValid只在第一次被调用时才被访问,并且当isValid属性在passwordRules数组中发生任何变化时都不会重新计算。
发布于 2017-04-20 11:58:29
请注意,passwordRules不返回可观察到的内容,因此MobX没有任何可跟踪的内容。如果您打算在将来修改它们,您可能需要@observable passwordRules = [{ isValid ... }]。您似乎将passwordRules处理为状态,而不是派生值(不应在派生时直接修改)。
https://stackoverflow.com/questions/43518693
复制相似问题