state作為訪問對象的參數?

(我是react btw的新手)所以我正在嘗試制作一個代碼:

  1. 讀取兩個選擇框和一個輸入的值
  2. 使用select的值讀取Javascript對象
  3. 將輸入的值乘以對象的值。

到目前為止,我已經做到了以下幾點:

const valores = {
  longitud: {
    metros: {
      val: 1,
    },
    centímetros: {
      val: 0.01,
    },
  fuerza: {
    newtons: {
      val: 1,
    },
    dina: {
      val: 0.0000001,
    },
  }
}
const [tipo, setTipo] = useState("longitud")
  const [uIn, setUIn] = useState("metros")
  const [val, setVal] = useState(0)
  const unidades = {
    longitud: [
      "metros",
      "centímetros",
    ],
    fuerza: ["newtons", "dinas"],
  }
  return (
    <div>
      <select
        id="tipoMedida"
        value={tipo}
        onChange={e => setTipo(e.target.value)}
      >
        <option value="longitud">Longitud</option>
        <option value="fuerza">Fuerza</option>
        
      </select>

      <input type="number" id="valor" value={val}
        onChange={e => setVal(e.target.value)}/>

      <select id="unidadOrigen" value={uIn}
        onChange={e => setUIn(e.target.value)}>
        {unidades[tipo].map(u => {
          return <option value={u}>{u}</option>
        })}
      </select>

這部分工作正常。但是,我不知道下一步該怎么做。我想顯示一個顯示結果的文本,為此我做了此操作<div id="resultado">El resultado es {val*valores[tipo[uIn[val]]]}</div> but它什么也沒顯示,{val*valores[tipo[uIn.val]]}說uIn是未定義的。我的代碼有問題嗎?如果沒有,我怎么才能得到結果?

? 最佳回答:

您訪問對象的方式導致了此問題。

正確的方法是

const result = val * valores[tipo][uIn].val;
console.log(result);

最后的代碼看起來是這樣的。

請注意,我對第一次選擇的onChange處理程序進行了一些更改,因為這會導致一個錯誤。修改tipo時,需要更改uIn的默認值

import { useState } from "react";

export default function App() {
  const valores = {
    longitud: {
      metros: {
        val: 1
      },
      centímetros: {
        val: 0.01
      }
    },
    fuerza: {
      newtons: {
        val: 1
      },
      dinas: {
        val: 0.0000001
      }
    }
  };
  const [tipo, setTipo] = useState("longitud");
  const [uIn, setUIn] = useState("metros");
  const [val, setVal] = useState(0);
  const unidades = {
    longitud: ["metros", "centímetros"],
    fuerza: ["newtons", "dinas"]
  };

  const result = val * valores[tipo][uIn].val;

  return (
    <div>
      <select
        id="tipoMedida"
        value={tipo}
        onChange={(e) => {
          setTipo(e.target.value);
          setUIn(unidades[e.target.value][0]);
        }}
      >
        <option value="longitud">Longitud</option>
        <option value="fuerza">Fuerza</option>
      </select>

      <input
        type="number"
        id="valor"
        value={val}
        onChange={(e) => setVal(e.target.value)}
      />

      <select
        id="unidadOrigen"
        value={uIn}
        onChange={(e) => setUIn(e.target.value)}
      >
        {unidades[tipo].map((u) => {
          return (
            <option key={u} value={u}>
              {u}
            </option>
          );
        })}
      </select>

      <div id="resultado">El resultado es {result}</div>
    </div>
  );
}

提示:您可以使用javascript方法Object.keys()動態生成選項,而不是對unidades變量中的值進行硬編碼。這樣,當添加新選項時,就不需要在很多地方進行太多更改。

主站蜘蛛池模板: 成人区人妻精品一区二区三区| 亚洲熟女一区二区三区| 99久久精品国产免看国产一区| 久久精品亚洲一区二区三区浴池| 国产综合无码一区二区色蜜蜜| 成人精品一区二区三区不卡免费看| 日本免费一区尤物| 91精品国产一区二区三区左线| 国产精品区AV一区二区| 成人在线观看一区| 亚洲丶国产丶欧美一区二区三区| 少妇特黄A一区二区三区| 亚洲国产精品一区二区九九| 在线观看日韩一区| 国产aⅴ精品一区二区三区久久| 色综合视频一区中文字幕| 亚洲视频一区在线| 无码国产精品一区二区免费| 无码AV中文一区二区三区| 久久国产精品视频一区| 亚洲av无码不卡一区二区三区 | 亚洲AV无码国产一区二区三区| 久久亚洲AV午夜福利精品一区| 熟女少妇精品一区二区| 视频一区精品自拍| 亚洲AV成人一区二区三区AV | 精品国产一区二区二三区在线观看 | 丝袜美腿一区二区三区| 国产精品香蕉在线一区| 欧美日韩国产免费一区二区三区| 日韩在线一区二区| 伊人色综合视频一区二区三区| 亚洲大尺度无码无码专线一区| 理论亚洲区美一区二区三区| 国产成人高清亚洲一区久久| 波多野结衣在线观看一区二区三区 | 亚洲第一区二区快射影院| 欧亚精品一区三区免费| 波多野结衣一区二区三区高清av | 国产在线精品观看一区| 色欲AV无码一区二区三区|