【问题标题】:State not calculating numbers correctly - just stringing them together说明没有正确计算数字 - 只是将它们串在一起
【发布时间】:2023-02-11 19:10:25
【问题描述】:

所以我觉得自己像个白痴。我将数字串在一起而不是从我的州添加。我似乎无法使用正常的更新状态方法来解决它。 它用于选择从库存中购买多少物品的组件。当我可以选择一次购买一个时,一切正常。现在我已经添加了应该控制它的“puchaseAmount”状态。如果我尝试一次购买 10 个,数量会中断并串成“010101010”。同样的事情也发生在拥有的物品总数上。我觉得我错过了一些简单而愚蠢的东西哈哈

  const [quantityOwned, setQuantityOwned] = useState(0);  
const [purchaseAmount, setPurchaseAmount] = useState(10);

const productIndex = newArray.findIndex((p) => p.id === product.id);

  if (productIndex !== -1) {
    newArray[productIndex].quantity = newArray[productIndex].quantity +  purchaseAmount
    const newCost = newArray[productIndex].cost * increaseConstant;
    newArray.push({
      ...product,
      cost: newCost
    });
  } else {
    newArray.push({
      ...product,
      quantity: purchaseAmount,
    });
  }

  if (productType === 'items') {
    setPlayerCharacter({
      ...playerCharacter,
      items: newArray,
    });
  }

  // // Increase product cost
  const newCost = product.cost * 1.1;
  product.cost = newCost.toFixed(2);

  // PPC Product
  if (product.type === 'pointsPerClick') {
    // Assign current values

    let currentPointsPerClick = playerCharacter.pointsPerClick;
    let currentTotalScore = playerCharacter.totalScore;

    let newPointsPerClickValue = currentPointsPerClick + product.effect;
    let newTotalScore = currentTotalScore - product.cost;

    setQuantityOwned(quantityOwned + purchaseAmount); // This is the trouble
    // i tried also (prev => prev + purchaseAmount)

    let newTotalBuildingsOwned = playerCharacter.totalBuildingsOwned;
    let newTotalItemsOwned = playerCharacter.totalItemsOwned;

    if (productType === 'items') {
      const newNum = playerCharacter.totalItemsOwned + purchaseAmount;
      newTotalItemsOwned = newNum;
    }

    if (productType === 'buildings') {
      const newNum =
        playerCharacter.newTotalBuildingsOwned + purchaseAmount;
      newTotalBuildingsOwned = newNum;
    }

    setPlayerCharacter({
      ...playerCharacter,
      pointsPerClick: newPointsPerClickValue,
      totalScore: newTotalScore,
      totalItemsOwned: newTotalItemsOwned,
      totalBuildingsOwned: newTotalBuildingsOwned,
    });
  }

【问题讨论】:

  • 与整个组件一起共享输出。

标签: javascript reactjs state


【解决方案1】:

您将 purchaseAmount(这是一个 string)与当前值 quantityOwned/totalItemsOwned/totalBuildingsOwned(这是一个number)连接起来,得到一个 string

在计算中使用之前,您需要使用Number()parseInt()purchaseAmount 转换为number

setQuantityOwned(prev => prev + Number(purchaseAmount));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多