不同阶级的状态变化(没有反应)

时间:2017-04-18 19:45:35

标签: javascript reactjs ecmascript-6

我有2个班级

一个是反应组件,第二个是标准类(验证)。

在Validation类中添加作为反应状态的元素。

state.formValidator = new FormValidation({id: 'install'});
   this.setState(state);

FormValidation类作为属性具有Input valdiation的类。当某些输入更新时,FormValidation isValid属性也会更新。

在我的反应组件中,我可以看到它。例如,当我在input元素上添加事件时。更新后,我调用函数来显示state.formValidator

isValid属性值是否正确。但我不能强迫反应自动检测到这种变化。

何时

this.state.formValidator.isValid

值正在被其他类/组件更改我无法在我的React组件中检测到此更改。

方法componentWillUpdate或componentWillReceiveProps是沉默的。

如何强制更新此组件?

我知道我可以为onUpdate上的每个输入事件添加,然后更新我的React组件。但更好的方法是在没有触发器的情况下使用每个输入。

有可能吗?

1 个答案:

答案 0 :(得分:0)

React通过简单的===检查来检查状态更改。因此,如果只更改状态中对象的属性,则不会重新渲染,因为对象通过引用相等进行比较,并且更改对象中的属性不会更改其引用ID。

出于这个原因,在你的州里拥有物品通常不是一个好主意 - 你的州应该是平坦的。

您可以通过从组件调用this.forceUpdate()来强制组件在发生特定情况时进行渲染,但除非非常需要,否则不鼓励这样做。

第二个选项是让您的组件的呈现状态取决于您的formValidator.isValid属性,或者将formValidator保留在其他位置,并且只将isValid属性复制到您的州。