我有以下2个计算属性,第一个是基于可观察的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
仅在第一次调用时被访问,并且只要passwordRules
数组中的任何isValid属性发生更改,就不会重新计算。
答案 0 :(得分:1)
请注意passwordRules
不返回可观察的内容,因此MobX无需跟踪。如果您打算将来修改它们,可能需要@observable passwordRules = [{ isValid ... }]
。您似乎将passwordRules作为 state 处理,而不是导出的值(不应该直接修改,因为它是派生的)