reactjs - 在 JSX 语法(React)中使用三元条件表达式时出现语法错误

标签 reactjs syntax-error ternary-operator react-jsx

我收到以下代码的错误:

{this.props.mountedPage === "frontpage" ?
            <Navbar className="navbar-nomargin"> :
            <Navbar>}

错误消息:Error - Parsing error: Unexpected token .this.props.mountedPage 中的第一个点

我有几行类似的东西,它工作正常,没有任何 lint 错误:
{this.props.mountedPage === "frontpage" ?
                    <NavItem href="/#services">Tjänster</NavItem>
                    : null}

编辑 :
感谢您的建议,您是对的,linter 未能正确关闭标签。我最终将元素的渲染移到了一个单独的函数中,以便标签可以正确关闭:
render: function() {
    return (
        this.props.mountedPage == "frontpage" ?
        <Navbar className="navbar-nomargin">{this.renderBody()}</Navbar> :
        <Navbar>{this.renderBody()}</Navbar>
    );
}

最佳答案

语法错误是您的 JSX 错误。所有 JSX 标签都必须手动关闭,因此请更改导航栏标签。

<navbar> // this will throw a syntax error in JSX

这些不会:
<navbar /> 

或者
<navbar></navbar>

编辑:
在这种情况下,有条件地渲染一个完全不同的组件并不是理想的解决方案,因为唯一的区别是类名。您可以这样做以有条件地更改类名:
<navbar className={ this.props.mountedPage === 'frontpage' ? 'navbar-nomargin' : '' } />

或者你可以使用这个 npm 包 classnames我发现这在任何 React 应用程序中都非常有用,因为这是很常见的事情。
import classNames from 'classnames'

...
<navbar className={ classNames('navbar', {
    'navbar-nomargin': mountedPage === 'frontPage'
}) } />

它非常有用,因为您可以列出您想要的任何类名(例如我添加的“导航栏”类),您还可以包含一个对象来处理具有此结构的所有条件类:
{
    desiredClassName: boolean,
    anotherPossibleClass: boolean,
}

这允许您将条件作为对象的值并将类名作为键。 true将导致包含 key 的类名。

关于reactjs - 在 JSX 语法(React)中使用三元条件表达式时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37299988/

相关文章:

javascript - 使用 fromNow() 时的时刻区域设置

reactjs - Redux:异步和同步调度

c# - 在C#中写行错误

reactjs - 无法通过 Electron 中的渲染器进程发送消息

variables - 如何在Laravel中将public内部的目录设置为类变量

c - 数组函数只返回第一个元素,我需要整个数组。请帮助

java三元运算符和惰性求值

c++ - 正确的三元运算符格式

reactjs - react : Ternary operation in JSX produces "Unexpected token" error

javascript - 从react调用javascript方法