인프런 커뮤니티 질문&답변
변경된 input 값이 텍스트로 보이지 않습니다.
해결된 질문
작성
·
426
0
 개발자 도구로 보면 섭씨에 값 입력 시 화씨 input에도 값이 담기고 변하는데 텍스트는 보이지 않습니다...
개발자 도구로 보면 섭씨에 값 입력 시 화씨 input에도 값이 담기고 변하는데 텍스트는 보이지 않습니다...
찾아보니 <input value="{props.temperature}"> 대신 <input defaultValue="{props.temperature}"> 를 쓰면 된대서 defaultValue를 쓰면 텍스트가 잘 나옵니다...
아래 사진은 <input defaultValue={props.temperature}>으로 수정했을 때 입니다.

왜 <input value=""> 대신 <input defaultValue="">를 사용해야 정상적으로 나오는지 궁금합니다.
TemperatureInput.jsx
const scaleNames = {
  c: "섭씨",
  f: "화씨",
};
function TemperatureInput(props) {
  const handleChange = (event) => {
    props.onTemperatureChange(event.target.value);
  };
  return (
    <fieldset>
      <legend>온도를 입력해주세요(단위: {scaleNames[props.scale]})</legend>
      <input vaule={props.temperature} onChange={handleChange} />
    </fieldset>
  );
}
export default TemperatureInput;
Calculator.jsx
import React, { useState } from "react";
import TemperatureInput from "./TemperatureInput";
function BoilingVerdict(props) {
  //물 끓음 감지
  if (props.celsius >= 100) {
    return <p>물이 끓습니다.</p>;
  }
  return <p>물이 끓지 않습니다.</p>;
}
function toCelsius(fahrenheit) {
  //화씨 계산 함수
  return ((fahrenheit - 32) * 5) / 9;
}
function toFahrenheit(celsius) {
  //섭씨 계산 함수
  return (celsius * 9) / 5 + 32;
}
function tryConvert(temperature, convert) {
  const input = parseFloat(temperature);
  if (Number.isNaN(input)) {
    return "";
  }
  const output = convert(input); //섭씨 or 화씨로 변환
  const rounded = Math.round(output * 1000) / 1000;
  return rounded.toString();
}
function Calculator(props) {
  const [temperature, setTemperature] = useState("");
  const [scale, setScale] = useState("c");
  const handleCelsiusChange = (temperature) => {
    setTemperature(temperature);
    setScale("c");
  };
  const handleFahrenheitChange = (temperature) => {
    setTemperature(temperature);
    setScale("f");
  };
  const celsius =
    scale === "f" ? tryConvert(temperature, toCelsius) : temperature;
  const fahrenheit =
    scale === "c" ? tryConvert(temperature, toFahrenheit) : temperature;
  return (
    <div>
      <TemperatureInput
        scale="c"
        temperature={celsius}
        onTemperatureChange={handleCelsiusChange}
      />
      <TemperatureInput
        scale="f"
        temperature={fahrenheit}
        onTemperatureChange={handleFahrenheitChange}
      />
      <BoilingVerdict celsius={parseFloat(celsius)} />
    </div>
  );
}
export default Calculator;
답변 1
0
Inje Lee (소플)
지식공유자
안녕하세요, 소플입니다.
지금 올려주신 코드에서 아래 부분에 오타가 있습니다.
vaule => value
<input vaule={props.temperature} onChange={handleChange} />먼저 오타를 수정해도 동일한 현상이 발생하는지 한 번 확인해보시기 바랍니다!
감사합니다.







오타 문제였군요...꼼꼼히 봐주셔서 감사합니다! 남은 강의도 감사히 잘 보겠습니다!