Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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_React Hooks - Fatal编程技术网

Javascript 使用状态和拼接反应

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,它就会工作 */ /*我

我对react中的useState有一个大问题。
我只想使用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())
也可以,只需验证重复筛选器和拼接不相同。筛选器是删除索引的最佳做法。对我来说,它工作正常。感谢筛选器和拼接不一样。筛选器是删除索引的最佳做法。对我来说,它工作正常。谢谢