Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 减去状态值-反应_Javascript_Reactjs_State - Fatal编程技术网

Javascript 减去状态值-反应

Javascript 减去状态值-反应,javascript,reactjs,state,Javascript,Reactjs,State,我在react中创建了一个计算器。它在应用程序状态中存储变量值。加法和乘法工作正常,但遗憾的是,在进行减法运算时会出现错误,例如9-1=-8。为什么对负面信号的反应会发生变化?在分裂期间也会发生同样的情况。 链接到工作应用程序: 我的代码: const{Component}=React; 类Calc扩展组件{ 建造师(道具){ 超级(道具); 此.state={ 上一页:“, 行动:“, 计算:“, 结果:“, 电流:“, 残疾人士:对 }; this.addtomery=this.addto

我在react中创建了一个计算器。它在应用程序状态中存储变量值。加法和乘法工作正常,但遗憾的是,在进行减法运算时会出现错误,例如9-1=-8。为什么对负面信号的反应会发生变化?在分裂期间也会发生同样的情况。 链接到工作应用程序: 我的代码:

const{Component}=React;
类Calc扩展组件{
建造师(道具){
超级(道具);
此.state={
上一页:“,
行动:“,
计算:“,
结果:“,
电流:“,
残疾人士:对
};
this.addtomery=this.addtomery.bind(this);
this.addition=this.addition.bind(this);
this.multiliaction=this.multiliaction.bind(this);
this.减法=this.减法.bind(this);
this.divide=this.divide.bind(this);
this.calculation=this.calculation.bind(this);
}
addToMemory=事件=>{
设id=event.target.id;
this.setState(({result})=>({
结果:parseInt((结果+=id))
}));
};
加法=()=>{
此.setState(()=>({
prev:this.state.result,
结果:“,
行动:“添加”,
禁用:false
}));
};
减法=()=>{
此.setState(()=>({
prev:this.state.result,
结果:“,
行动:“小组”,
禁用:false
}));
};
倍频=()=>{
此.setState(()=>({
prev:this.state.result,
结果:“,
动作:“骡子”,
禁用:false
}));
};
除法=()=>{
此.setState(()=>({
prev:this.state.result,
结果:“,
行动:"分区",
禁用:false
}));
};
计算=(上一个,禁用,结果)=>{
如果(this.state.action==“添加”){
this.setState({prev,mem2,current})=>({
当前:this.state.result,
结果:parseInt(结果)+parseInt(上一个)
}));
//this.state.result=this.state.result+this.state.prev;
this.setState({result:this.state.result+this.state.prev});
}else if(this.state.action==“sub”){
this.setState({prev,sum,current})=>({
当前:this.state.result,
结果:parseInt(结果)-parseInt(上一个)
}));
//this.state.result=this.state.result+this.state.prev;
这是我的国家({
结果:parseInt(this.state.result)-parseInt(this.state.prev)
});
}else if(this.state.action==“mult”){
this.setState({prev,sum,current})=>({
当前:this.state.result,
结果:parseInt(结果)*parseInt(上一个)
}));
//this.state.result=this.state.result+this.state.prev;
this.setState({result:this.state.result*this.state.prev});
}
else if(this.state.action==“div”){
this.setState({prev,sum,current})=>({
当前:this.state.result,
结果:parseInt(结果)/parseInt(上一个)
}));
//this.state.result=this.state.result+this.state.prev;
this.setState({result:this.state.result/this.state.prev});
}
};
render(){
返回(
1.
2.
3.
4.
5.
6.
7.
8.
9
0
+
-
*
/
=
MEM:{this.state.prev}

总和:{this.state.calculation}

RES:{this.state.result}

); } } render(,document.getElementById(“根”))


您可以使用堆栈片段(
[]
工具栏按钮)将正在运行的示例放在站点上。堆栈代码段支持React,包括JSX。编辑:我是为你做的,因为你在问题中包含了所有必要的代码(很好!)。我怀疑这是实际问题,但上面的代码中有一个反模式:你正在使用回调版本的
setState
并在回调中使用
this.state
。你不想那样做。相反,使用回调接收的状态对象:
this.setState(state=>({prev:state.result,/*…*/}))状态更新可能是异步的,并且可能会堆积起来,因此调用状态回调时,
此.State
可能(实际上)已过时。(不过,您使用回调表单是正确的;在基于以前的状态创建状态时,您肯定希望使用该表单。)这里的最佳选择是使用IDE或浏览器中内置的调试器逐步完成代码。在减法逻辑上设置一个断点,并在使用变量时查看变量的值,等等。为您提供几个站点注释(这不是问题):1。你可以考虑<代码>开关>代码>而不是一系列长的<>代码>如果 /<代码>,如果。2.您正在将处理程序创建为实例属性上的箭头函数,这意味着您不必
绑定它们,因为它们将关闭
。(但我建议将它们改为实际的方法,并保留
bind
调用。)减法和除法的操作顺序很重要(用代码尝试8/2得到0.25!)您应该将
parseInt(prev)
放在
parseInt(result)之前
在所有操作中。您可以使用堆栈片段(
[]
工具栏按钮)将正在运行的示例放在此处。堆栈代码段支持React,包括JSX。编辑:我是为你做的,因为你在问题中包含了所有必要的代码(很好!)。我怀疑这是实际问题,但上面的代码中有一个反模式:你正在使用回调版本的
setState
并在回调中使用
this.state
。你不想那样做。相反,使用回调接收的状态对象:
this.setState(state=>({prev:state.result,/*…*/}))