Reactjs ,背景色:'#d2d4d8',边框:'1px纯黑'}}/> this.dot()}value=“.”style={{高度:'5vh',宽度:'12vh',背景色:'#d2d4d8',边框:'1px纯黑'}}/> this.operation('=')}value=“=”样式={{{高度:'5vh',宽度:'12vh',背景色:'#ff9100',边框:'1px纯黑'}}/> ) } }

Reactjs ,背景色:'#d2d4d8',边框:'1px纯黑'}}/> this.dot()}value=“.”style={{高度:'5vh',宽度:'12vh',背景色:'#d2d4d8',边框:'1px纯黑'}}/> this.operation('=')}value=“=”样式={{{高度:'5vh',宽度:'12vh',背景色:'#ff9100',边框:'1px纯黑'}}/> ) } },reactjs,calculator,Reactjs,Calculator,现在我在post中添加了我的整个组件,因为setState是不同步。若要在状态设置为新值后执行某些操作,则需要将回调作为第二个参数传递。请看这段代码: constructor() { this.state = { foo1: 'bar', foo2: 'bar' } } someMethod() { this.setState({foo1: 'baz}); console.log(this.state.foo1); // outputs "bar" } som

现在我在post中添加了我的整个组件,因为
setState
是不同步。若要在状态设置为新值后执行某些操作,则需要将回调作为第二个参数传递。请看这段代码:

constructor() {
  this.state = {
    foo1: 'bar',
    foo2: 'bar'
  }
}

someMethod() {
  this.setState({foo1: 'baz});
  console.log(this.state.foo1); // outputs "bar"
}

someDifferentMethod() {
  this.setState({foo2: 'baz}, () => {console.log(this.state.foo2)});
  // outputs "baz"
}

您正在设置状态,然后检查其值。您需要了解
setState
是一个异步操作,您不能指望它的值在调用后立即被更改

根据react:

对setState的调用是异步的-不要依赖this.state在调用setState后立即反映新值。如果需要基于当前状态计算值,请传递更新程序函数而不是对象(有关详细信息,请参见下文)

在代码中,您正在更改状态:
this.setState({operation:operator})
然后检查它的新值
if(this.state.operation==='+')

您应该检查
操作符
,或者在状态更改后,使用
组件更新
或调用
设置状态

this.setState({operation:operator},()=>{if(this.state.operation==='+')})

编辑:
编辑后,我发现两个问题:

  • 您的体系结构不好,您看到有时设置后会收到一个空操作符,并且有一些不完整的
    if
    语句,一旦将代码移动到回调,您就可以删除它

  • 设置状态时,应清除
    ,因为它不再相关。在这行:
    this.setState({firstValue:sum,value:sum,showingTemporaryResult:true,operation:operator})


  • 我在操作的地方做了这个change操作符,但是如果(this.state.operation==''{let firstValue=parseInt(this.state.value);this.setState({firstValue});this.setState({value:'',operation:operator});console.log,我应该在条件中做什么更改呢('or here');}现在无法理解您的问题,但问题是您使用了错误的运营商,因为您尚未更改为新的运营商。我可以将我的代码发送给您吗?您想共享您的电子邮件吗?无需。只需使用代码编辑您的帖子,我会回复again@bilalahmad123456你能解释一下你的问题吗?你试过移动c吗调用
    setState
    constructor() {
      this.state = {
        foo1: 'bar',
        foo2: 'bar'
      }
    }
    
    someMethod() {
      this.setState({foo1: 'baz});
      console.log(this.state.foo1); // outputs "bar"
    }
    
    someDifferentMethod() {
      this.setState({foo2: 'baz}, () => {console.log(this.state.foo2)});
      // outputs "baz"
    }