ReactJs:在对象数组上使用Reducer。我需要更多的理解

ReactJs : useReducer on array of object. I need more understanding

您会找到一个 console.log(标签)来跟踪标签的演变。

这就是我迷路的地方。

为了验证在第一种情况 return 之前只对突变进行评论 'toogleCanJump' 你会发现它不再是排他性的 'canJump' 都可以具有值 true .然而,即使有了突变,我也无法实现 'canJump' 的值对触发 'jumped' 做出反应,即使突变如前所述起作用。

这个问题和第一个问题有点相同,但场景不同。我觉得我明白了改变和 returning 我的状态(对象数组)之间的区别,但我似乎无法使其有效。 'toggleCanJump' 上的突变似乎起作用,但 'toggleJumped' 上的突变实际上不起作用,并且 return 正在使用选项卡,因为我宣布它确实是重置它的最佳方式(更优雅的方式)?

我想补充一点,可能是我的逻辑不对!或许应该是数组数组,我觉得object比较多嘴,方便以后网站的更新。但我不反对用其他方式来做。

如果您想找到解决方案或其他做事方式。非常感谢您的宝贵时间。感谢阅读。

查看重新配置的沙箱:

https://codesandbox.io/s/cold-frost-x62x3?file=/src/App.js

关于第一个问题,你实际上是把map当作forEach来使用,直接改变状态。 Map 旨在 return 一个新数组,因为您使用“=”将值等同于原始数组。

然而,似乎只有一个影响结果的事实是一种错觉(他们都这样做)并且是由不同的原因造成的。你的派遣被多次触发——有些奇怪,有些甚至:抵消影响。发生这种情况有两个原因:1. 你的 reducer 没有放在你的函数之外,2. 你的按钮是嵌套的,因此需要 e.stopPropagation().

关于问题二,因为你的hero.style属性是独一无二的,你需要创建一个对象映射来恢复它。它更容易保持原样,因为字符已经硬编码到初始状态。