在这个codesandbox中,我尝试在鼠标进入时改变一个div元素的背景色,并在鼠标离开时恢复它。它只适用于最外面的div元素。
我知道设置状态是“异步”的,但事实上它确实在外缘工作,这让我怀疑它是一个闭包问题。
使用onMouseOut并没有什么不同。我可能完全错误地处理了这样的问题,但我找不出当前实现的问题所在。
在这个codesandbox中,我尝试在鼠标进入时改变一个div元素的背景色,并在鼠标离开时恢复它。它只适用于最外面的div元素。
我知道设置状态是“异步”的,但事实上它确实在外缘工作,这让我怀疑它是一个闭包问题。
使用onMouseOut并没有什么不同。我可能完全错误地处理了这样的问题,但我找不出当前实现的问题所在。
1条答案
按热度按时间wqsoz72f1#
你需要根据先前的值更新状态。这是一个闭包问题。你不需要使用
editGrid
状态。而是使用setEditGrid和produce函数,该函数将先前的值作为第一个参数传递。您可以只更新参数中的更改(通常我们称之为草稿)。您可以在ReactDocs的setState中阅读更多传递函数的内容
你可以在代码中做一点改进,你不需要为每个网格块设置
id
,如果没有这样的要求会影响网格结构,就使用rowIndex
和colIndex
。