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 react中计数器递增和递减的基本问题_Javascript_Reactjs_Counter - Fatal编程技术网

Javascript react中计数器递增和递减的基本问题

Javascript react中计数器递增和递减的基本问题,javascript,reactjs,counter,Javascript,Reactjs,Counter,这是一个基本问题。我已经开始学习React,我有一个作业,我必须通过递增和递减按钮来更改值。我已经用类组件的方式实现了它 但我有一个疑问。请参阅下面更改值的代码 increment = () => { this.setState({ count: this.state.count + 1 //HERE ----------------- }); }; 为什么不是这样 increment = () => { this.setState({

这是一个基本问题。我已经开始学习React,我有一个作业,我必须通过递增和递减按钮来更改值。我已经用类组件的方式实现了它

但我有一个疑问。请参阅下面更改值的代码

increment = () => {
    this.setState({
      count: this.state.count + 1   //HERE -----------------
    });
  };
为什么不是这样

increment = () => {
    this.setState({
      this.state.count: this.state.count + 1    // Here ...ERROR COMES
    });
  };
那么,为什么不能像this.state.count:this.state.count+1那样访问它呢??
请告诉我原因。

不起作用的原因是,在对象内赋值与赋值普通变量的语法不同

详细说明:

创建对象时,使用以下语法:

让myObj={
福:“酒吧”
}
或者你可以:

让myObj={}
myObj.foo='bar'
但你做不到

让myObj={
myObj.foo:“酒吧”
}
使用
setState
函数所做的是创建一个新对象并将其传递给函数

你应该像这样轻松地写:

const newState={count:this.state.count+1}
this.setState(newState);
这就是为什么必须使用第一个语法


然后,
setState
所做的是将您提供给它的对象与当前的
this.state
合并,在下一次渲染时,
this.state
将包含更新的值。

因为
setState中的
this
指的是状态already@ControlAltDel,你能详细说明一下吗。。还是不明白,我想第二种方法也行。但您不需要使用第二种方式编写,因为对象是根据
状态自动合并的,而
计数
是对象的状态之一key@PrakashReddyPotlapadu@terpinmd第二种方式不起作用
this.state.count
不是指定对象键的有效语法。它将中断。值得指出的是,
this.state.count
可能已经过时,因为该状态是异步应用的。反应:“如果下一个状态取决于当前状态,我们建议在这个场景中使用更新程序函数形式”,根据首选语法:
this.setState(({count})=>({count:count+1}))
this.setState(state=>({count:state.count+1}))
。这是真的,它只是有点超出了这个问题的范围,所以我选择了让答案更简短、更集中。@3limin4t0r,你能用你的方式重写我的代码并解释一下吗?它们都使用了
setState
的“更新程序”形式,在这种形式中,它被传递一个函数而不是一个新对象。函数将前一个状态作为其参数,并期望从中返回新状态。@3limin4t0r给出的第一个示例用于提取
count
值。第二个例子是相同的,没有使用解构。就像我说的,这超出了这个问题的范围。^原因
{count}
{count:count+1}
用附加的括号括起来,告诉JavaScript这是一个表达式。如果没有额外的括号,引擎将认为您正在启动一个新的块。在终端中执行以下操作时,您也可以看到这种情况:
{a:1}。a
将导致错误,因为引擎认为您在
({a:1})时打开了一个新块。a
将导致
1
。我建议看一下上面链接的销毁文档。特别是“对象分解”部分。