Javascript (已解决)useState Hook won和#x27;当我在onSelect中设置状态时触发(下一步使用react引导表)

Javascript (已解决)useState Hook won和#x27;当我在onSelect中设置状态时触发(下一步使用react引导表),javascript,reactjs,react-hooks,react-bootstrap-table,Javascript,Reactjs,React Hooks,React Bootstrap Table,这是我使用MERN Stack的代码,我注意到每当我刷新页面并第一次单击表格的复选框时,选中的状态不会改变,但在我第二次单击后,它会设置状态,请提供任何建议 const [selected, setSelected] = useState([]) const users = [...] const column = [...] const selectRow = { mode: 'checkbox', clickToSelect: true, //onSelect eve

这是我使用MERN Stack的代码,我注意到每当我刷新页面并第一次单击表格的复选框时,选中的状态不会改变,但在我第二次单击后,它会设置状态,请提供任何建议

const [selected, setSelected] = useState([])
const users = [...]
const column = [...]
const selectRow = {
    mode: 'checkbox',
    clickToSelect: true,
    //onSelect event
    onSelect: (row, isSelect, rowIndex, e) => {
        //if the checkbox was checked then add it into the selected array
        //else remove it
        if (isSelect === true) {
            setSelected([...selected, row._id])
            console.log(selected)
        }
        else if (isSelect === false) {
            setSelected(selected.filter(item => item !== row._id))
            console.log(selected)
        }
    },
};


useState react挂钩是异步的。更改状态后,您将无法立即记录所选的
,因为您将获得当前值,而不是更新后的值

在你的截图中发生的是

单击第一个复选框

setSelected([…selected,row.\u id])//异步调用setSelected以更新状态
console.log(selected)//记录所选([])的当前值
//…选定后不久将成为(['id of first checkbox'])
单击第二个复选框

setSelected(selected.filter(item=>item!==row.\u id))//异步调用setSelected以更新状态
console.log(selected)//记录selected的当前值(['id of first checkbox'])
//…选定后不久的某个时间将变为(['id of first checkbox','id of second checkbox'])
简言之,我相信您的代码正在按预期工作

如果在组件的渲染jsx中的某个地方放置类似于以下内容的内容,则每次单击复选框时都会看到组件重新渲染(几乎立即),并显示相应的ID,从而显示您的编码是否正常工作

{selected.map(id=>id

)}
这是一个一次关闭的错误吗?如果您单击的第一件事是第二次或第三次检查,会发生什么情况?它是否给出了它的价值?或者它给出了第一个或第二个的值?使用代码片段进行描述,以便我们更容易理解。你能创建codesandbox或fiddler吗?我已经按照你的说明进行了操作,它确实是这样工作的。我现在明白它是怎么工作的了。非常感谢。没问题。很高兴我能帮忙