Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在className if else语法中反应JSX_Javascript_Reactjs_Syntax_Jsx_Classname - Fatal编程技术网

Javascript 在className if else语法中反应JSX

Javascript 在className if else语法中反应JSX,javascript,reactjs,syntax,jsx,classname,Javascript,Reactjs,Syntax,Jsx,Classname,我目前正在开发一个react应用程序,根据某些状态变化添加和更改类。它在使用三元运算符进行测试时成功运行,但现在我意识到我必须添加多个else-if语句,因此我尝试将其转换为经典的if-else格式,但遇到语法错误,我不确定如何执行 下面是三元运算符,它工作得很好:- <div className={"wrapper " + (this.state.hot ? 'wrapper-gradient-hot' : 'wrapper-gradient-cold')}> 以下是我试图使

我目前正在开发一个react应用程序,根据某些状态变化添加和更改类。它在使用三元运算符进行测试时成功运行,但现在我意识到我必须添加多个else-if语句,因此我尝试将其转换为经典的if-else格式,但遇到语法错误,我不确定如何执行

下面是三元运算符,它工作得很好:-

<div className={"wrapper " + (this.state.hot ? 'wrapper-gradient-hot' : 'wrapper-gradient-cold')}>

以下是我试图使其成为JSX中的经典if-else,但失败了:-

<div className={"wrapper " + (
                        if (this.state.hot) {
                            return 'wrapper-gradient-hot';
                        } else {
                            return 'wrapper-gradient-cold';
                        }
                    )}>


请帮助我:)

你可以采取的一种方法是在你的JSX之外处理这个。因此,在渲染函数中,仍然在返回的位置上方

render() {
  let gradientValue;
  // Put your if-else here and update gradientValue on each condition.
  return (
    <h1 className=`wrapper ${gradientValue}`>Your html here</h1>
  );
}
render(){
让梯度值;
//将if-else放在这里,并在每个条件下更新gradientValue。
返回(
你的html在这里
);
}

return
只从函数内部返回值,只是在if/else语句周围加上括号是行不通的。最好还是坚持使用三元运算符,并根据需要嵌套它们。

If和else语句,只是语句。用
{…}
包装的内联JSX表达式只允许表达式;语句不是表达式

您的三元方法很好,但由于两个字符串之间有一些共同点,您可以实际使用插值:

<div className={`wrapper-gradient-${this.state.hot ? 'hot' : 'cold'}`}>

只能在React组件属性内使用表达式。您需要将逻辑移到函数中

function temperatureClassname(temp){
  const prefix = 'wrapper-gradient-'

  switch (temp) {
    case 'hot':      return prefix + 'hot'
    case 'cold':     return prefix + 'cold'
    case 'ice-cold': return prefix + 'too-cool'
  }
}
您的react组件如下所示:

<div className={ temperatureClassname(this.state.hot) }>


欢迎使用StackOverflow!:)谢谢,你的建议正是我需要的哈哈。我几乎从不使用switch语句,但在这里它非常完美。谢谢:)很高兴我能帮忙。干杯=)