mobx计算属性观察计算属性不会重新计算

时间:2017-04-20 11:49:00

标签: reactjs mobx

我有以下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属性发生更改,就不会重新计算。

1 个答案:

答案 0 :(得分:1)

请注意passwordRules不返回可观察的内容,因此MobX无需跟踪。如果您打算将来修改它们,可能需要@observable passwordRules = [{ isValid ... }]。您似乎将passwordRules作为 state 处理,而不是导出的值(不应该直接修改,因为它是派生的