Javascript react中计数器递增和递减的基本问题
这是一个基本问题。我已经开始学习React,我有一个作业,我必须通过递增和递减按钮来更改值。我已经用类组件的方式实现了它 但我有一个疑问。请参阅下面更改值的代码Javascript react中计数器递增和递减的基本问题,javascript,reactjs,counter,Javascript,Reactjs,Counter,这是一个基本问题。我已经开始学习React,我有一个作业,我必须通过递增和递减按钮来更改值。我已经用类组件的方式实现了它 但我有一个疑问。请参阅下面更改值的代码 increment = () => { this.setState({ count: this.state.count + 1 //HERE ----------------- }); }; 为什么不是这样 increment = () => { this.setState({
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
。我建议看一下上面链接的销毁文档。特别是“对象分解”部分。