Javascript (已解决)useState Hook won和#x27;当我在onSelect中设置状态时触发(下一步使用react引导表)
这是我使用MERN Stack的代码,我注意到每当我刷新页面并第一次单击表格的复选框时,选中的状态不会改变,但在我第二次单击后,它会设置状态,请提供任何建议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
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吗?我已经按照你的说明进行了操作,它确实是这样工作的。我现在明白它是怎么工作的了。非常感谢。没问题。很高兴我能帮忙