Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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 列表中新添加的项不会在React中重新呈现组件_Javascript_Reactjs - Fatal编程技术网

Javascript 列表中新添加的项不会在React中重新呈现组件

Javascript 列表中新添加的项不会在React中重新呈现组件,javascript,reactjs,Javascript,Reactjs,在每个使用socket.io添加/删除/出售项目的请求之后,都会调用函数refreshtitems(),该函数只会将state设置为数据库中的新项目。一切正常,但有时在添加6-7项后,表格不会刷新。添加项后,我可以在数据库和刷新页面中看到它。你知道问题来自哪里吗? 项目有github 函数刷新项(){ emit('getCurrentItems',data=>{ 设定电流(数据); }) emit('getSoldItems',data=>{ setSold(数据); }) }由于这是一个异步

在每个使用socket.io添加/删除/出售项目的请求之后,都会调用函数refreshtitems(),该函数只会将state设置为数据库中的新项目。一切正常,但有时在添加6-7项后,表格不会刷新。添加项后,我可以在数据库和刷新页面中看到它。你知道问题来自哪里吗? 项目有github

函数刷新项(){
emit('getCurrentItems',data=>{
设定电流(数据);
})
emit('getSoldItems',data=>{
setSold(数据);
})

}
由于这是一个异步函数,请在setState中使用回调函数并更新状态

像这样

function refreshItems() {
        socket.emit('getCurrentItems', data => {
          setCurrent( pre => data);
        })
        socket.emit('getSoldItems', data => {
          setSold(pre => data);
        })
      }

但是为什么刷新会有问题呢?国防部改变了我的标题,它说了一些不同的东西。我的项目正在添加,所以refreshItems()可以正常工作,但在添加了随机数量的项目后,当我尝试添加另一个项目时,他不会显示。我必须刷新页面或添加另一项,然后显示其中的2项。因为当您随机添加项时,状态会被破坏,因为它是一个异步函数,许多并发更新使状态不可预测,所以建议使用回调到状态。所以应该是这样的?getCurrentItems',data=>{setCurrent(prevState=>{return data;});})或甚至没有返回?如果使用括号,则必须添加返回语句,如果不使用括号,则不需要返回。这两者是相同的
setCurrent(prevState=>{returndata;})
setCurrent(prevState=>data;)