【发布时间】:2020-02-01 06:48:32
【问题描述】:
我正在尝试从 put 请求更新数组
const [descriptors, setDescriptors] = useState([]);
const handleDescriptorUpdate = (id, descriptorData) => {
services
.putDescriptor(id, descriptorData)
.then((response) => {
const descriptorIndex = _.findIndex(descriptors, (e) => e.id === id);
if (descriptorIndex !== -1) {
const tempDescriptors = [...descriptors];
tempDescriptors[descriptorIndex] = response.data;
setDescriptors(tempDescriptors);
}
})
.catch((error) => {
console.error(error);
});
};
当我当时只执行 1 个请求时,这很好用,但是当我单击执行两次更新的按钮时,而不是传播数组并用新值更新旧值,它们都在传播相同的数组导致当第二个承诺被解决时,它会使用从服务器返回的新值(第二个值)更新状态但是改变第一个值(被第一个承诺改变的那个)为其原始值。
描述符最初由对象数组填充(来自 get 请求):
[
{
"id": 24,
"name": "Test 4.1",
"percentage": 0,
"towerId": "5cfc9200-c04a-11e9-89c0-2dd5d3707b1b"
},
{
"id": 23,
"name": "Test 3.1",
"percentage": 0,
"towerId": "5cfc9200-c04a-11e9-89c0-2dd5d3707b1b"
}
]
【问题讨论】:
-
欢迎来到 SO!我不认为这真的是一个minimal reproducible example--
descriptors是一个对象数组吗?澄清感谢 - 非常感谢! -
这很奇怪,因为 useState 不会立即反映更改,如果有人知道如何强制 useState 同步就好了
标签: javascript reactjs