React中该场景是否需要使用状态更新器函数?
问题解答
1. 状态更新后立即使用旧状态是否正确?
这段代码的用法是正确的。
React的状态更新是异步的,调用setLastCoordinates后,lastCoordinates不会立刻更新为新值,仍然保持调用前的旧状态。而这段代码的逻辑恰好需要用上一次的坐标(旧的lastCoordinates)和当前鼠标位置计算偏移量dx、dy,之后才把当前坐标设为新的lastCoordinates——这完全匹配需求场景,所以写法没问题。
2. 是否需要改用更新器函数?
你提到的setLastCoordinates(() => ({x: e.clientX, y: e.clientY}))写法,在这里其实没必要。
更新器函数的核心作用是当新状态依赖旧状态时,确保获取到最新的旧状态值。但当前代码里的新坐标只依赖当前鼠标的clientX和clientY,和旧状态无关,所以直接传对象和用更新器函数的效果完全一致,原写法反而更简洁。
如果后续逻辑调整,比如新坐标需要基于旧坐标做修改(比如叠加固定偏移),那时候才需要用更新器函数来保证状态的正确性,但就当前代码而言,两种写法都可行,原写法更合适。
内容的提问来源于stack exchange,提问作者user22262485
相关产品推荐
相关产品推荐

