我正在尝试更新一个对象数组,但即使将正确的值传递给函数,该数组仍为空白。如果我尝试添加第二个对象,则会以某种方式添加第一个对象,但我不确定自己做错了什么。
const [qualifications, setQualifications] = useState([{}]);
function handleAddQualification(values: any) {
console.log(values);
console.log(qualifications);
setQualifications((prev) => {
return [...prev, values];
});
console.log(qualifications);
}
我传递的值被正确记录,随后的 2 个资格日志都显示一个空的对象数组。
我简化了对象,因此在我的屏幕截图中我添加了“一”并且值记录正确,但资格数组保持空白。如果我添加第二个“two”条目,那么出于某种原因,它会将“one”添加到数组中。
请分享一些关于这里发生了什么的见解?
答案 0 :(得分:1)
这是事件循环如何工作的示例:)
就你而言:
handleAddQualification
values
,qualifications
setQualifications
添加到队列作为异步操作qualifications
,结果与步骤 3 相同setQualifications
之前添加的队列中的任务setQualifications
更新 qualifications
查看此处以更好地理解https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop
答案 1 :(得分:0)
状态更新调用是异步的,您无法通过在更新调用后立即记录来查看它们。
interface Qual {
subject?: string;
level?: string;
other?: string
}
设置为const [qualifications, setQualifications] = useState<Qual[]>([]);
useEffect(() => {
console.log({qualifications});
}, [qualifications])
public static void copyRange(int[] a1, int[] a2, int i1, int i2, int length) {
for (int i = i2; i < i2 + length; i++) {
a2[i] = a1[i1];
i1++;
}
}