해결된 질문
작성
·
336
0
개발자 도구로 보면 섭씨에 값 입력 시 화씨 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
안녕하세요, 소플입니다.
지금 올려주신 코드에서 아래 부분에 오타가 있습니다.
vaule
=> value
<input vaule={props.temperature} onChange={handleChange} />
먼저 오타를 수정해도 동일한 현상이 발생하는지 한 번 확인해보시기 바랍니다!
감사합니다.
오타 문제였군요...꼼꼼히 봐주셔서 감사합니다! 남은 강의도 감사히 잘 보겠습니다!