重构 += 表达式
Refactor += expression
代码
const updatePlayerPosition = ({ x, y, collided }) => {
setPlayer((prev) => ({
...prev,
pos: { x: (prev.position.x += x), y: (prev.position.y += y) },
collided,
}));
};
问题
EsLint 签署这一行
pos: { x: (prev.position.x += x), y: (prev.position.y += y) },
作为"No return error"和this is the link的解释。
我尝试阅读它并尝试应用 Eslint 的解决方案,但我无法编译它。
问题
如何重构行
pos: { x: (prev.position.x += x), y: (prev.position.y += y) },
没有错误?
假设当前代码按预期工作,并且您确实想要改变prev.position
,问题只是 linter 警告,问题是您有被解析为表达式的赋值,这可能会使代码更难阅读。通常,将赋值作为独立语句代替:
const updatePlayerPosition = ({ x, y, collided }) => {
setPlayer((prev) => {
prev.position.x += x;
prev.position.y += y;
return {
...prev,
pos: { x: prev.position.x, y: prev.position.y },
collided,
};
});
};
我相信您想通过将 x 和 y 值添加到之前的位置来更新玩家的位置。 prev.position.x += x
,这是在改变 prev 对象,但你只需要 return 一个更新的 pos 和新的 x 和 y 值。
方法不对:
pos: { x: (prev.position.x += x), y: (prev.position.y += y) },
正确的方法:
pos: { x: (prev.position.x + x), y: (prev.position.y + y) },
代码
const updatePlayerPosition = ({ x, y, collided }) => {
setPlayer((prev) => ({
...prev,
pos: { x: (prev.position.x += x), y: (prev.position.y += y) },
collided,
}));
};
问题
EsLint 签署这一行
pos: { x: (prev.position.x += x), y: (prev.position.y += y) },
作为"No return error"和this is the link的解释。
我尝试阅读它并尝试应用 Eslint 的解决方案,但我无法编译它。
问题
如何重构行
pos: { x: (prev.position.x += x), y: (prev.position.y += y) },
没有错误?
假设当前代码按预期工作,并且您确实想要改变prev.position
,问题只是 linter 警告,问题是您有被解析为表达式的赋值,这可能会使代码更难阅读。通常,将赋值作为独立语句代替:
const updatePlayerPosition = ({ x, y, collided }) => {
setPlayer((prev) => {
prev.position.x += x;
prev.position.y += y;
return {
...prev,
pos: { x: prev.position.x, y: prev.position.y },
collided,
};
});
};
我相信您想通过将 x 和 y 值添加到之前的位置来更新玩家的位置。 prev.position.x += x
,这是在改变 prev 对象,但你只需要 return 一个更新的 pos 和新的 x 和 y 值。
方法不对:
pos: { x: (prev.position.x += x), y: (prev.position.y += y) },
正确的方法:
pos: { x: (prev.position.x + x), y: (prev.position.y + y) },