我正在尝试构建一个导出 DnD 5e 字符表的 React 应用程序。根据您选择的种族/物种,有不同的奖励。我有一个下拉菜单来选择您的比赛,我想将奖金应用到适当的统计数据。问题是,如果我选择不同的选项,它不会恢复统计数据。因此,如果我单击“Orc”,我会获得+1的力量,但如果我将其更改为“Elf”,我会获得+1的智力,但+1的力量会保留下来,然后回到“Orc”会添加另一个+ 1 给力。关于设置这些有条件奖金有什么建议吗?
这是分配统计值的函数
<div>
{standardArray.map((stat, index) => {
return (
<div key={index}>
<Text marginLeft={5}> {stat.name[index]}</Text>
<Select
placeholder={stat.name[index]}
width="90%"
marginLeft={3}
marginBottom={3}
onChange={handleChange}
name={"playerStat" + [index]}
>
Name: {stat.name}
{stat.value.map((value, index) => {
return (
<option key={index} value={value}>
{value}
</option>
);
})}
</Select>
</div>
);
})}
</div>
这是调用奖励功能的下拉菜单
<Select
placeholder="Choose a Species"
color={"White"}
marginLeft={3}
marginRight={3}
width="90%"
onChange={handleSpeciesChange}
value={state.playerSpecies}
name="playerSpecies"
>
<option value="Orc">Orc</option>
<option value="Elf">Elf</option>
<option value="Human">Human</option>
</Select>
这是应用奖金的功能
const speciesBonus = (value: string) => {
if (value === "Orc") {
const speciesBonus = 1;
state.playerStat0 = parseInt(state.playerStat0) + speciesBonus;
}
if (value === "Elf") {
const speciesBonus = 1;
state.playerStat3 = parseInt(state.playerStat3) + speciesBonus;
} else {
state.playerStat0 = parseInt(state.playerStat0);
}
};
[1]: https://i.sstatic.net/Ia3mceWk.png
[2]: https://i.sstatic.net/Yjdc48hx.png
[3]: https://i.sstatic.net/ICMR3tWk.png
我将从 RPG 角度以及技术角度来回答。
物种选择影响的不仅仅是基础统计数据。 您需要长期记录该角色属于哪个物种,例如种族能力,或者一些狂野的情况,例如转世。
不要直接更新角色的统计数据,而是将所选物种添加为您存储自身的数据字段。 然后使用类似于您的
speciesBonus
的内容来确定每个统计数据的 display 的正确值,而无需实际更新状态。
作为副作用,这样做可以解决您的技术问题。
为了完整起见,您的问题源于这样一个事实:您的
speciesBonus
函数仅应用新物种奖励。 如果您想使用相同的结构更新它,则需要更改 speciesBonus
签名以接受 current
和 previous
物种,这样您就可以“撤消”之前选择的好处。