通过下拉选择应用奖励,当选择不同的选项时奖励消失

问题描述 投票:0回答:1

我正在尝试构建一个导出 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
javascript reactjs event-handling chakra-ui
1个回答
0
投票

我将从 RPG 角度以及技术角度来回答。

物种选择影响的不仅仅是基础统计数据。 您需要长期记录该角色属于哪个物种,例如种族能力,或者一些狂野的情况,例如转世

不要直接更新角色的统计数据,而是将所选物种添加为您存储自身的数据字段。 然后使用类似于您的

speciesBonus
的内容来确定每个统计数据的 display 的正确值,而无需实际更新状态。

作为副作用,这样做可以解决您的技术问题。

为了完整起见,您的问题源于这样一个事实:您的

speciesBonus
函数仅应用新物种奖励。 如果您想使用相同的结构更新它,则需要更改
speciesBonus
签名以接受
current
previous
物种,这样您就可以“撤消”之前选择的好处。

© www.soinside.com 2019 - 2024. All rights reserved.