Javascript React道具在功能中使用时未更新

Javascript React道具在功能中使用时未更新,javascript,reactjs,Javascript,Reactjs,我有一种非常奇怪的行为。我有以下代码(超级简单版本): const CanvasManager=()=>{ const[overlays,setOverlays]=useState([]); 返回 } const CanvasOverlay=({overlays,setOverlays})=>{ const[open,setOpen]=useState(false); //…一些代码 console.log(overlays)//第一次渲染:[],第二次渲染:[{id:123}] const o

我有一种非常奇怪的行为。我有以下代码(超级简单版本):

const CanvasManager=()=>{
const[overlays,setOverlays]=useState([]);
返回
}
const CanvasOverlay=({overlays,setOverlays})=>{
const[open,setOpen]=useState(false);
//…一些代码
console.log(overlays)//第一次渲染:[],第二次渲染:[{id:123}]
const openeditoveraydialog=id=>{
console.log(overlays)//第一次渲染:[],第二次渲染:[]o._id==id);
设置打开(覆盖数据);//{
const newOverlays=[…覆盖];
推送({id:123});
设置覆盖(新覆盖);
}
返回OpenEditOverlyDialog(123)}/>
}
第一个组件具有HTML5画布的覆盖状态。它返回一个处理实际覆盖的组件。我可以在那里添加一个覆盖{id:123},它被设置为一个新的覆盖。然后,它作为一个道具提供给CanvasOverlay组件。当I console.log时,它会显示在第一个控制台日志中,但不会显示在“OpenEditOverlyDialog”函数中的on中

我错过了什么


帮助是非常感激的。谢谢大家!

所以基本上,当您调用openeditoverlydialog时,您会看到空数组?正确。但是在组件的渲染中,我看到数组不是空的。就在我调用函数时。请显示完整的CanvasOverlay组件,或者至少显示
openeditOverlyDialog
的功能used@thedude它很复杂,也不容易写。基本上是上面的设置。您怀疑它没有设置,因为调用函数的上下文错误?@thedude setOpen正在工作。。。它基本上来自同一个组件。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常质量更高,更容易吸引选票。
 const editOverlays = () => 
     setOverlays([...overlays, id: 123]);
 const editOverlays = () => 
     setOverlays([...overlays, id: 123]);