如果在胖箭头函数内

Posted

技术标签:

【中文标题】如果在胖箭头函数内【英文标题】:If inside fat arrow function 【发布时间】:2018-02-01 03:08:43 【问题描述】:

我不知道怎么写。我在胖箭头中有这个三元运算符。但如果无法执行代码。我在 browserify 或控制台上没有收到任何错误,但它只是不打印标题。

如果我删除 和三元运算符,它可以正常工作。

我写错了什么?

<Row className="grid-header">
    
        this.props.columnsInfo.map((info) => 
            width = (info.colWidth) ? "className=info.colWidth" : "xs=this.calculateColumnSize()";
            <Col style= paddingTop: 10, paddingLeft: 10  key=info.header width>info.header</Col>
        )
    
</Row>

【问题讨论】:

【参考方案1】:

你只是忘记了map()中的return。 在map() 中,每次迭代都会返回undefined,这将被忽略,因为没有要渲染的想法。 当您使用 fat arrow function with "" 时,您必须显式返回 ((x) =&gt; return x + x) 一个变量,但 没有 有一个隐式返回 ((x) =&gt; x + x) .

解决方案

<Row className="grid-header">
    
        this.props.columnsInfo.map(info => 
            const width = info.colWidth 
              ? "className=info.colWidth"
              : "xs=this.calculateColumnSize()";
            return <Col style= paddingTop: 10, paddingLeft: 10  key=info.header width>info.header</Col>
        )
    
</Row>

【讨论】:

@dfsq 我把它改成const width。当我回答主要错误时没有注意到它。谢谢..【参考方案2】:

如果不是胖箭头函数的整个主体,则需要显式返回 jsx。

您的代码已修复:

<Row className="grid-header">
    this.props.columnsInfo.map(info => 
            const width = (info.colWidth)? "className=info.colWidth" : "xs=this.calculateColumnSize()";
            return (<Col style=paddingTop:10,paddingLeft:10 key=info.header width>info.header</Col>);
    )
</Row>

删除花括号和三元运算符时它起作用的原因是,当您为主体执行没有花括号的胖箭头函数时,它会隐式返回主体,该主体必须只有一个语句。由于您在函数体中添加第二条语句(三元行),因此您需要添加体大括号,现在有体大括号,您需要实际编写 return 关键字,因为它不再隐含你的 jsx 线。

【讨论】:

很好的解释 TW80000。谢谢。

以上是关于如果在胖箭头函数内的主要内容,如果未能解决你的问题,请参考以下文章

箭头函数内的三元运算符

箭头函数无法使用this的解决方法

箭头函数(Arrow Function)

ES6深入浅出-2 新版函数:箭头函数 2 视频-2.视频 箭头函数杂谈

箭头函数与普通函数的区别

箭头函数和立即执行函数