Angularjs 一个状态变量取决于多个其他状态变量

Angularjs 一个状态变量取决于多个其他状态变量,angularjs,reactjs,Angularjs,Reactjs,我来自棱角分明的世界。我还是一个新的反应 我遇到的一个问题是: 在angular中,我们有$watch来监视一个作用域变量以更改和更新其他变量。像手表B,C,D一样,B,C,D的变化会影响变量A 在react中,我尝试做同样的事情。但是,我正在调用setState(B,callbackB)来更新A。A的setState对渲染有影响 对于变量B,这样做似乎是正确的。但是,更新A将在下一个渲染周期中发生。而且这个.forceUpdate()似乎不起作用 我做错什么了吗 谢谢您不能依靠setState

我来自棱角分明的世界。我还是一个新的反应

我遇到的一个问题是:

在angular中,我们有
$watch
来监视一个作用域变量以更改和更新其他变量。像手表B,C,D一样,B,C,D的变化会影响变量A

在react中,我尝试做同样的事情。但是,我正在调用
setState(B,callbackB)
来更新A。A的
setState
对渲染有影响

对于变量B,这样做似乎是正确的。但是,更新A将在下一个渲染周期中发生。而且
这个.forceUpdate()
似乎不起作用

我做错什么了吗


谢谢

您不能依靠setState立即更新。尝试显式地将新值传递给setState A。

一个示例将有助于澄清您的情况,但根据“更新A”需要的内容,您可以将其移动到渲染函数。例如

class Component extends React.Component {
  handleUpdate(B) {
    this.setState({B})
  }

  computeAFromB(B) {
    ...
    return A
  }

  render() {
    const A = this.computeAFromB(this.state.B)

    return <div>{A}</div>
  }
}
类组件扩展React.Component{
手动更新(B){
this.setState({B})
}
计算机B(B){
...
归还
}
render(){
常量A=this.computeAFromB(this.state.B)
返回{A}
}
}

当从角度转换到反应时,重要的是要记住,
scope!==状态
。这可能会有帮助:

这是我的示例代码,我想我已经找到了答案

在JSFIDLE中的示例代码中。输入字段是必填字段

如果字段中没有任何内容,则应禁用该按钮

问题是,如果您键入某个内容并将其删除,按钮仍处于活动状态,直到您再键入一个键,这是下一个循环。

我使用input1Err来确定是否应该在checkErr()中禁用formError

这就是视图更改在下一个周期中发生的原因因为setState是异步的

我使用this.state.input1Err来确定formErr,在if语句出现之前可能会更改它

所以我改为下面的闭包,它解决了我的问题

checkErr(){
  const self = this;
  (function(j){setTimeout(function(){
    if(self.state.input1Err == false){
      self.setState({formErr: false });
    }else{
      self.setState({formErr: true });
    }
  },10)})(self);
}
这似乎是一个快速解决办法。但是,如果有ajax调用并连接到state.input1Err,该怎么办。有没有一种方法可以监视这个变量,这样当它发生变化时,complete,我就可以进行某种回调

谢谢

checkErr(){
  const self = this;
  (function(j){setTimeout(function(){
    if(self.state.input1Err == false){
      self.setState({formErr: false });
    }else{
      self.setState({formErr: true });
    }
  },10)})(self);
}