Reactjs 什么';setCount(prev=>;prev+;1)和setCount(count+;1)之间的区别是什么?
我正在读一个React钩子的例子。我发现他们在写作Reactjs 什么';setCount(prev=>;prev+;1)和setCount(count+;1)之间的区别是什么?,reactjs,Reactjs,我正在读一个React钩子的例子。我发现他们在写作 setCount(count + 1) 但我通常是这样写的 setCount(prev => prev + 1) 有什么区别吗?哪一个更好?嗯,这取决于情况 如果要更新其值依赖于前一状态的状态,则应使用以下命令 setCount(prev => prev + 1); 这会将状态更新为新状态 如果像下面这样使用,那么它将更新计数一次,而不是两次,因为setState本质上是异步的 setCount(count + 1); set
setCount(count + 1)
但我通常是这样写的
setCount(prev => prev + 1)
有什么区别吗?哪一个更好?嗯,这取决于情况 如果要更新其值依赖于前一状态的状态,则应使用以下命令
setCount(prev => prev + 1);
这会将状态更新为新状态
如果像下面这样使用,那么它将更新计数一次,而不是两次,因为setState
本质上是异步的
setCount(count + 1);
setCount(count + 1);
但是如果你这样做
setCount(count => count + 1);
setCount(count => count + 1);
然后它将更新状态两次,就像我们从以前的状态更新状态一样
const{useState}=React;
常量示例=()=>{
const[count,setCount]=useState(0);
常量handleClick=()=>{
setCount(count=>count+1);
setCount(count=>count+1);
}
报税表(
{count}
加2
);
};
ReactDOM.render(
,document.getElementById(“react”)
);代码>
我复制了React Hook的注释
与类组件中的setState方法不同,useState不会自动合并更新对象。通过将函数更新程序窗体与对象扩展语法相结合,可以复制此行为:
setState(prevState => {
// Object.assign would also work
return {...prevState, ...updatedValues};
});
另一个选项是useReducer,它更适合于管理包含多个子值的状态对象。在大多数情况下,它们正在执行相同的任务
但当你的反应成分变得超级复杂时,第二个更好。因为在第一种情况下,如果您有许多setState()
队列,那么count
是不可靠的。这可能是一些你没有预料到的价值setCount(prev=>prev+1)
始终在其先前值的基础上添加1,这样更可靠
实际上,您可以将(previousValue,props)
作为参数传递给setState()
有一个区别,第一个区别是,计数将基于由于函数中的关闭而发生渲染时的当前值
第二个始终使用增量的最新值
因为闭包是一个复杂的主题,这里有一些例子。第一部分显示了两者之间的主要区别
第二个例子展示了几种方法,它们可以让闭包和效果/挂钩正常工作
const{useState,useffect}=React;
函数示例(){
const[count1,setCount1]=useState(0);
useffect(()=>{
设置计数1(计数1+1);
设置计数1(计数1+1);
设置计数1(计数1+1);
},[])
const[count2,setCount2]=useState(0);
useffect(()=>{
setCount2(prev=>prev+1);
setCount2(prev=>prev+1);
setCount2(prev=>prev+1);
},[])
返回
count1和count2都有3个增量。
count1保持为1,因为useEffect中的count1变量不会因useEffect中的arrow函数中的闭包而更改
当前计数1:{count1}
当前计数2:{count2}
}
ReactDOM.render(,document.getElementById('root'))
@Adicia,第一个带有“保修”,第二个带有“保修”。设置状态((以前的值,道具)=>{})是一个类组件特性,而不是useState
hook特性。