Javascript 基于状态的函数执行,不';我不能正常工作
我想将温度从摄氏度更改为华氏度(反之亦然),但我还没有找到解决这个问题的正确方法,我编写了一个函数,可以进行摄氏度到华氏度的转换,但它给我带来了一个错误。所以我需要有人能够打开我的大脑,并向我解释这一点哈哈(让我明白我在说什么) 这是我的密码: 我在下面的函数中添加了注释,这是一个不起作用的函数:Javascript 基于状态的函数执行,不';我不能正常工作,javascript,reactjs,if-statement,runtime-error,Javascript,Reactjs,If Statement,Runtime Error,我想将温度从摄氏度更改为华氏度(反之亦然),但我还没有找到解决这个问题的正确方法,我编写了一个函数,可以进行摄氏度到华氏度的转换,但它给我带来了一个错误。所以我需要有人能够打开我的大脑,并向我解释这一点哈哈(让我明白我在说什么) 这是我的密码: 我在下面的函数中添加了注释,这是一个不起作用的函数: convertingTemperature() { const { Fahrenheit, Celcius } = this.state; this.setState({ Fahrenheit:
convertingTemperature() {
const { Fahrenheit, Celcius } = this.state;
this.setState({
Fahrenheit: true,
});
const _Celcius = this.state.weather.weather && this.state.weather.main.temp;
const _Fahrenheit = Math.round(_Celcius * 5 / 9 + 32);
if(Fahrenheit) {
this.setState({ temp: _Fahrenheit })
};
}
我想做的是保持我的状态为布尔值,因此如果华氏温度为真,我可以进行转换并调用我的函数,但我认为不起作用的原因是因为我正在从我的天气状态对象中提取值,这来自我的api调用。所以我想把这个值拉出来,放到一个单独的状态,这样我就可以用它进行转换
---我想说的是,当单击温度时,我希望能够在华氏温度和摄氏温度之间切换。我更新了您的代码,使用了两个组件,其中温度以及与温度相关的所有内容都在
WeatherData
组件中定义。使用道具将温度传递给它,并且始终在Celcius中传递。(注意!!!)
这里的主要思想是有两个组件,其中temp作为prop
传递给另一个组件。此组件还处理从C到F的转换,当用户单击范围时,还使用函数getCorrectTemp()
(该函数还将其格式化为字符串)将C转换为F
注意:记住onClick
事件中的bind
,否则该上下文将丢失
类WeatherData扩展React.Component{
建造师(道具){
超级(道具);
this.state={isCelcius:true}
}
toggleIsCelcius(){
this.setState({isCelcius:!this.state.isCelcius});
}
getCorrectTemp(温度,isCelcius){
if(this.state.isCelcius)返回`${this.props.tempCelcius}C`;
返回`${(this.props.tempCelcius*9/5)+32}F`;
}
render(){
const{main,name,icon,country,tempCelcius}=this.props;
if(tempCelcius){
const tempFormatted=this.getCorrectTemp(tempCelcius,this.state.isCelcius);
返回(
{name},{country}
{main}
{tempFormatted}
);
}否则{
返回加载。。。
}
}
}
我还添加了一个加载状态,但如果您不想,可以删除它。请记住处理尚未从服务器接收到温度的状态。我更新了您的代码,使用了两个组件,其中温度以及与温度相关的所有内容都在WeatherData
组件中定义。温度是passed使用道具向下传递,并始终在Celcius中传递(注意!!!)
这里的主要思想是,您有两个组件,其中temp作为prop
传递给另一个组件。该组件还处理从C到F的转换,当用户单击span时,还使用函数getCorrectTemp()
(该函数还将其格式化为字符串)将C转换为F
注意:记住onClick
事件中的bind
,否则该上下文将丢失
类WeatherData扩展React.Component{
建造师(道具){
超级(道具);
this.state={isCelcius:true}
}
toggleIsCelcius(){
this.setState({isCelcius:!this.state.isCelcius});
}
getCorrectTemp(温度,isCelcius){
if(this.state.isCelcius)返回`${this.props.tempCelcius}C`;
返回`${(this.props.tempCelcius*9/5)+32}F`;
}
render(){
const{main,name,icon,country,tempCelcius}=this.props;
if(tempCelcius){
const tempFormatted=this.getCorrectTemp(tempCelcius,this.state.isCelcius);
返回(
{name},{country}
{main}
{tempFormatted}
);
}否则{
返回加载。。。
}
}
}
我还添加了一个加载状态,但如果您不需要,可以将其删除。请记住处理尚未从服务器接收到temp的状态。进一步解释,这没有帮助您不了解/需要进一步帮助的是什么?我像您所说的那样添加了代码,我知道它有什么作用,但不起作用k、 它不会使应用程序崩溃…但是它不会进行转换。想法是,当我单击温度时,它会在华氏温度和摄氏温度之间切换,反之亦然。正如我所说…不起作用。请使用正确的信息更新问题。据我所知,没有迹象表明切换是通过按tempera键完成的是的。给我一点时间,我会为你相应地更新答案。进一步解释,这没有帮助你不理解/需要进一步帮助的是什么?我像你说的那样添加了代码,我知道它可以做什么,但不起作用。它不会使应用程序崩溃…但是它不会进行转换。我的想法是,当我检查温度,它在华氏温度和摄氏温度之间切换,反之亦然。正如我所说的…不起作用使用正确的信息更新问题。据我所知,没有迹象表明通过按温度进行切换。请稍等,我会相应地为您更新答案。