Javascript 使用状态和拼接反应
我对react中的useState有一个大问题。Javascript 使用状态和拼接反应,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我对react中的useState有一个大问题。 我只想使用slice从数组中删除一个对象,并使用hook设置该数组的状态。 但它不起作用我不知道为什么 看: const[img,setImg]=useState(所有图像); 常量RemoveImageIndex=(索引)=>{ splice(index,1);//当i console.log时,我可以看到对象已被删除 setImg(img);//没有任何变化 /*测试 setImg([]);//如果我删除了所有img,它就会工作 */ /*我
我只想使用slice从数组中删除一个对象,并使用hook设置该数组的状态。
但它不起作用我不知道为什么 看:
const[img,setImg]=useState(所有图像);
常量RemoveImageIndex=(索引)=>{
splice(index,1);//当i console.log时,我可以看到对象已被删除
setImg(img);//没有任何变化
/*测试
setImg([]);//如果我删除了所有img,它就会工作
*/
/*我已经试过了:
设温度=img;
图像拼接(索引1);
设定温度;
*/
/*解决方案
setImg([…img]);
*/
};
返回(
{variants.map((variant,index)=>{
回来
})}
谢谢!您正在直接改变状态,这就是它不起作用的原因。请使用不可变数组方法和函数形式
setState
从数组中删除项,例如,使用过滤器
:
setImg(currentImg => currentImg.filter((img, i) => i !== index));
您正在直接改变状态,这就是它不起作用的原因。请使用不可变数组方法和函数形式
setState
从数组中删除项,例如使用过滤器
:
setImg(currentImg => currentImg.filter((img, i) => i !== index));
您是否有兴趣
setImg([…img])
,制作一个数组的浅拷贝,您已经从中删除了该项?哦,是的,它正在工作,您能解释一下为什么吗?因为setImg现在获得了一个不同的引用,它是您数组的一个拷贝(实际上setImg(img.slice())
也可以,只需验证重复项,您是否有兴趣setImg([…img])
,制作一个数组的浅拷贝,您已经从中删除了该项?哦,是的,它正在工作,您能解释为什么吗?因为setImg现在获得了一个不同的引用,它是您数组的一个副本(实际上setImg(img.slice())
也可以,只需验证重复筛选器和拼接不相同。筛选器是删除索引的最佳做法。对我来说,它工作正常。感谢筛选器和拼接不一样。筛选器是删除索引的最佳做法。对我来说,它工作正常。谢谢