setState不会重新渲染ReactJS。

3

prevArray是没有状态属性或值的旧数组。Response来自后端。通过检查Web并查看组件部分,我可以看到该数组正在使用新值进行设置。我可以从数组中删除一个项目。

       const [data,setData] = useState([]);
                    

        OrderFinder.put("/orderss",{
            sent:"success",
            data:array        
        }).then((response) => {updateStatus(response.data,array)})
        .catch(err => console.log(err))
    }

     const updateStatus = (response,array) => {
       for(const obj in array){
        for(const order in response.orders){
            if(array[obj].Name === response.orders[order].name.replace("#", "")){
                array[obj].Status = response.orders[order].Status;
                break;
            }
        }
    }
    const newArray = array;
    setData(newArray);
}
1个回答

0
我相信您正在将相同的链接设置为数组到状态中,这就是为什么React无法跟踪您的更改。尝试使用扩展运算符创建一个新的数组:
    const newArray = [...array];
    setData(newArray);

解释:JS 中的非原始值(对象、数组)通过链接分配,这意味着如果你将一个数组分配给两个变量,那么这些变量将是相同的,因为它们指向同一数组(你可以在这里阅读更多详细信息)。

哇,那个起作用了!谢谢!你介意解释一下为什么它起作用吗?你说的“设置相同的链接”是什么意思? - Andres Ruiz
在答案中放置解释和链接。抱歉,我需要原始文本才能为您提供翻译。 - Georgy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接