我希望我的切换按钮将我所有的摄氏温度切换到华氏温度,但是我不知道如何在此特定应用中执行此操作。摄氏温度是通过axios调用在状态中定义的:
class App extends Component {
state = {
temperature: undefined,
然后我有天气组件:
const Weather = props => {
let tempC = props.temperature;
let tempF = (props.temperature * 9) / 5 + 32;
return (
<div className={Styles.outputs}>
{props.id && props.country && (
<div className={Styles.fontIcon}>
<i className={`owf owf-${props.id}`} />
</div>
)}
{props.city && props.country && (
<h2 className={Styles.outputCity}>
{props.city}, {props.country}
</h2>
)}
{props.main && props.description && (
<div className={Styles.outputDesc}>
{props.main}/{props.description}
</div>
)}
{props.id && props.country && <Toggle />}
<div className={Styles.outputDatas}>
<div className={Styles.outputData}>
{props.temperature && (
<div className={Styles.outputTitle}>
Temperature
<p className={Styles.outputResult}>{props.temperature}°C</p>{" "}
</div>
)}
</div>
<div className={Styles.outputData}>
{props.wind && (
<div className={Styles.outputTitle}>
Wind
<p className={Styles.outputResult}>{props.wind} m/s</p>
</div>
)}
</div>
<div className={Styles.outputData}>
{props.humidity && (
<div className={Styles.outputTitle}>
Humidity
<p className={Styles.outputResult}>{props.humidity}%</p>
</div>
)}
</div>
</div>
</div>
);
};
我尝试针对不同的温度发出两个不同的axios调用,并且尝试使用按钮和道具,但是我无法使其正常工作。
我想使用Toggle开关从华氏温度更改为摄氏温度。
const Toggle = () => {
return (
<label className={Styles.switchWrap}>
<input type="checkbox" />
<div className={Styles.switch} />
</label>
);
};
答案 0 :(得分:1)
首先,您需要记录切换按钮的状态,以便可以在温度之间进行相应的切换。像
state = { toggleOn: false }; //true when button is checked
然后,将{props.temperature}°C
替换为{ this.state.toggleOn ? tempF+'°F' : tempC+°C }
当toggleOn为true时,它将以华氏温度渲染温度,否则将以摄氏温度渲染。
希望这会有所帮助!
答案 1 :(得分:1)
<Weather />
组件-像这样:class App extends Component {
constructor(props) {
super(props);
// Keeping it Celcius by default
this.state = {
temperatureUnit: "C"
}
}
onTemperatureChange = temperature => {
this.setState({
temperatureUnit
}, () => {
// If you have a API call to make, this is place.
});
}
render() {
return <Weather temperatureUnit={this.state.temperatureUnit} onTemperatureChange={this.onTemperatureChange} />
}
}
{props.id && props.country && <Toggle temperatureChanged={props.onTemperatureChanged} />}
别忘了根据显示的温度单位来计算值。
<div className={Styles.outputData}>
{props.temperature && (
<div className={Styles.outputTitle}>
Temperature
<p className={Styles.outputResult}>
{props.temperatureUnit === "C"
? `${props.tempC} °C`
: `${props.tempF}F`}
</p>
</div>
)}
</div>
const Toggle = props => {
return (
<label className={Styles.switchWrap}>
<input
onChange={event =>
event.target.checked
? props.temperatureChanged("F")
: props.temperatureChanged("C")
}
type="checkbox"
/>
<div className={Styles.switch} />
</label>
);
};